1. web服务
1. WEB服务:网站服务,部署并启动了这个服务,你就可以搭建一个网站
2. WEB中间件: 等同于WEB服务
3. 中间件:范围更加广泛,指的负载均衡之后的服务
4. 数据库中间件:数据库缓存,消息对列
2. 极速上手指南
nginx官网: nginx documentation
2.1 配置yum源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2.2 yum安装nginx
yum install -y nginx
2.3 检查安装
nginx -V
2.4 目录结构
目录结构 说明 /etc/nginx/ nginx各种配置文件的目录 /etc/nginx/nginx.conf 主配置文件 /etc/nginx/conf.d/ 子配置文件(网站) /etc/nginx/conf.d/default.conf 默认的子配置文件 /usr/sbin/nginx nginx的命令 /usr/share/nginx/html/ nginx默认的站点目录,网站的根目录 /var/log/nginx/ nginx日志:访问日志,错误日志,跳转日志
2.5 日常启动与管理
##创建自启动文件
systemctl enable nginx
##启动服务
systemctl start nginx
##查看端口
ss - lntup
##查看进程
ps -ef |grep nginx
2.6 浏览器访问:http://10.0.0.8
2.7 命令行访问
curl 10.0.0.8
curl -v 10.0.0.8
3. Nginx核心功能详解
3.1 主配置文件详解(/etc/nginx/nginx.conf)
3.2 子配置文件(/etc/nginx/conf.d/default.conf)
如果删除首页文件,进行(不指定文件)访问会发生什么?
403文件首页不存在
4 部署第1个网站
网站要求 说明 域名 cxk.oldboylinux.com 站点目录 /app/code/cxk 代码来源 cxk.zip
4.1 配置文件
##子配置文件
vim /etc/nginx/conf.d/cxk.conf
server {listen 80;server_name cxk.oldboylinux.cn;location / {root /app/code/cxk;index index.html;}
}
##检查语法
nginx -t
##热加载
systemctl reload nginx
4.2 其他配置
##创建站点目录
mkdir -p /app/code/cxk
##解压代码
unzip cxk.zip
mv cxk /app/code/##配置linux和windows hosts解析
#win: C:\Windows\System32\drivers\etc\hosts
#windows下面win键+r 输入drivers 访问etc下的hosts
#linux: /etc/hosts
10.0.0.8 cxk.oldboylinux.cn
4.3 访问
5. Nginx处理用户请求流程
5.1 使用域名访问网站流程:
1. DNS解析:域名 ------->>IP地址
2. 连接80端口: tcp3次握手与网站的80端口建立连接
3. http请求:请求方法,URI,HOST等信息
4. nginx处理:
4.1 http请求,http区域处理
4.2 不同的server{} 区域(子配置文件)处理
4.2.1 端口
4.2.2 域名:用户请求的域名与子配置文件server_name进行匹配
4.2.3 匹配成功,就让对应的子配置文件(server{})处理
4.2.4 根据子配置文件的,root,location规则,index进行处理查找文件
4.2.5 把找到的文件发回给用户
5. http响应
6. 客户收到文件内容,浏览器解析,进行展示
5.2 虚拟主机
5.2.1 概述与分类
虚拟主机的分类 说明 应用场景 基于域名的虚拟主机 不同域名访问不同的站点 生产环境最常用的 基于端口的虚拟主机 不同端口访问不同的站点 保护,设置特殊端口.1024以上 8888 18888 基于ip的虚拟主机 不同ip访问不同的站点 保护,用户只能通过某个ip连接进来
5.2.2 基于域名的虚拟主机
##创建子配置文件
vim /etc/nginx/conf.d/bird.conf
server {listen 80;server_name bird.oldboulinux.cn; ##站点目录location /{root /app/code/bird;index index.html;}}
测试不创建站点目录:
curl -H Host:bird.oldboylinux.cn http://10.0.0.8
测试创建站点目录,但是没有首页文件
##创建站点目录
mkdir -p /app/code/bird/
##测试
curl -H Host:bird.oldboylinux.cn http://10.0.0.8
测试创建首页文件后访问
##创建首页文件
echo 'xzb666' >/app/code/bird/index.html
##测试
curl -H Host:bird.oldboylinux.cn http://10.0.0.8
5.2.3 基于端口的虚拟主机
不同的端口访问不的网站
##修改live.oldboylinux.cn端口为81
server {listen 81;server_name live.oldboylinux.cn;location / {root /app/code/live;index index.html;}
}
##访问
curl -H Host:live.oldboylinux.cn http://10.0.0.8:81/index.html
5.2.4 基于ip的虚拟主机
搭建mimi网站,端口是8888,只能通过172.16.1.7内网访问
##创建配置文件
server {listen 172.16.1.8:8888;server_name mi.oldboylinux.cn;location / {root /app/code/mi;index index.html;}
}
##在首页文件写入内容
echo '只允许172.16.1.8 的8888端口访问' >/app/code/mi/index.html
##测试
curl -H Host:mi.oldboylinux.cn http://10.0.0.8:8888
curl -H Host:mi.oldboylinux.cn http://172.16.1.8:8888
6. Nginx日志
6.1 概述
日志 使用建议 定义 使用 错误日志 发生故障的时候可以查看,4xx,5xx 通过错误级别指定 error_log 访问日志 记录着用户什么时候访问 网站哪些页面,客户端信息 通过log_format定义访问日志的格式 error_log
6.2 错误日志
1. 指定错误日志的位置和错误级别
2. 错误日志级别:debug, info, notice, warn, error, crit, alert, or emerg左到右,越来越粗糙
3. debug: 未来用于调试使用,短时间开启,网站访问量较大别开
给每个虚拟主机指定自己独立的错误日志
##需要先把nginx.conf里面的error_log注释
##给cxk.conf增加自己的错误日志
server {listen 80;server_name cxk.oldboylinux.cn;error_log /var/log/nginx/cxk.oldboylinux.cn/error.log notice;root /app/code/cxk;location / {index index.html;}}
nginx -t
systemctl reload nginx
##创建错误日志目录和文件
mkdir -p /var/log/nginx/cxk.oldboylinux/
touch /var/log/nginx/cxk.oldboylinux/error.log
6.3 访问日志
1. 辅助我们进行分析,网站访问量
2. log_format指定访问日志的格式
3.log_format 格式名字 格式.....
Ngx访问日志格式(ngx内置变量) 说明 $remote_addr 客户端ip地址 $request 请求报文的起始行 $status http状态码 $body_bytes_sent 响应给客户的文件的大小,响应报文的主体大小(文件大小) 单位字节 $http_user_agent 客户端代理(浏览器) $http_x_forwarded_for XFF头,负载中使用,记录用户真实的ip地址 $time_local 时间 $remote_user 用户名
给每个虚拟主机指定自己独立的访问日志
##需要把nginx.conf里面的access_log注释
##给cxk.conf创建访问日志
server {listen 80;server_name cxk.oldboylinux.cn;error_log /var/log/nginx/cxk.oldboylinux/error_log notice;access_log /var/log/nginx/cxk.oldboylinux/access-log main;location / {root /app/code/cxk;index index.html;}
}
nginx -t
systemctl reload nginx
7. Location规则
7.1 概述
1. 在ngx用于匹配用户请求中的uri.ngx对用户请求中的uri进行判断
2. 如果用户请求的uri是xxxx,则做xxxx
3. URI vs URL:
URL: https://nginx.org/en/docs/
URI: /en/docs/ 域名后面的内容
7.2 搭建大型直播购物网站
域名:buy.oldboylinux.cn
站点目录:/app/code/buy/
首页文件index.html
后台管理页面:/app/code/buy/admin/index.html
要求后台只能内网访问:172.16.1.0/24网段
##创建buy.conf配置文件,编写配置文件
server {listen 80;server_name buy.oldboylinux.cn;location / {index index.html;root /app/code/buy;}##管理后台##uri: /admin/location /admin/{allow 172.16.1.0/24;deny all;
}
}
##准备站点目录
mkdir -p /app/code/buy/ ##首页端
echo '这是首页' >/app/code/buy/index.html
mkdir -p /app/code/buy/admin/ ##管理端
echo '这是管理端' >/app/code/buy/admin/index.html
##测试
curl -H Host:buy.oldboylinux.cn http://10.0.0.8/admin/
curl -H Host:buy.oldboylinux.cn http://172.16.1.8/admin/
7.3 浏览器缓存
给cxk网站加速,设置缓存,网站中html,js,css结尾的文件缓存1天,图片缓存1小时
##给cxk.conf设置缓存
server {listen 80;server_name cxk.oldboylinux.cn;error_log /var/log/nginx/cxk.oldboylinux/error_log notice;access_log /var/log/nginx/cxk.oldboylinux/access-log main;root /app/code/cxk;location / {index index.html;}## uri包含.html或者.js或者.css缓存一天location ~* \.(html|js|css)$ {expires 1d;}location ~* \.(jpg|jpeg|png|gif|bmp)$ {expires 1h;}
}
7.4 location 规则小结
location规则 说明 location / {xxxx} 默认规则,保底,location规则在进行匹配的时候,其他的规则都匹配失败了,这时候匹 配默认的规则 location /admin/ {} 用于匹配请求的uri
buy.oldboylinux.cn/admin/
location ~ \. (jpg|jpeg)$ {} 支持正则,区分大小写 cxk.oldboylinux.cn/lidao/lidao.jpg location ~* \. (jpg|jpeg)$ {} 支持正则,不区分大小写 cxk.oldboylinux.cn/lidao/lidao.jpg
8. 搭建高清视频下载站
搭建要求:
1. 浏览器打开后,显示目录结构(类似清华源结构)
2. 增加svip功能
3. 增加统计功能,统计nginx服务的状态,访问情况
8.1 autoindex模块
autoindex模块 | 说明 |
---|---|
autoindex on | 开启目录索引功能(显示站点目录下的文件的列表,首页文件不存在 |
autoindex_localtime on | 显示本地时间 |
autoindex_exact_size off | 是否显示精确的文件的大小. off表示以人类可读形式显示大小 |
##编写vip.conf配置文件
server {listen 80;server_name vip.oldboylinux.cn;root /app/code/vip;error_log /var/log/nginx/vip.oldboylinux/error.log notice;access_log /var/log/nginx/vip.oldboylinux/access.log main;charset utf8; ##编码格式autoindex on; ##目录索引autoindex_localtime on; ##显示当地时间 autoindex_exact_size off; ##显示文件大小location / {index index.html;}
}
nginx -t
systemctl reload nginx
##测试
8.2 增加svip认证功能
1. 增加一个svip目录,里面创建文件
2. 增加认证功能(用户名和密码)
3. auth_basic模块
yum install -y httpd-tools ##安装工具
#创建文件
htpasswd -bc /etc/nginx/user xzb666 1 ##xzb666是用户名 1是密码
##修改权限
chmod 600 /etc/nginx/user
chown nginx.nginx /etc/nginx/user
##修改vip.conf配置文件
server {listen 80;server_name vip.oldboylinux.cn;root /app/code/vip;error_log /var/log/nginx/vip.oldboylinux/error.log notice;access_log /var/log/nginx/vip.oldboylinux/access.log main;charset utf8;autoindex on;autoindex_localtime on;autoindex_exact_size off;location / {index index.html;}location /svip/{auth_basic "input password"; ###输出提示,根据不同浏览器,可能不显示auth_basic_user_file /etc/nginx/user; ## #指定用户名,密码文件}
}
##测试
8.3 增加统计功能
stub_status模块/指令,显示nginx服务的状态,用户访问的状态
##修改vip.conf配置文件
server {listen 80;server_name vip.oldboylinux.cn;root /app/code/vip;error_log /var/log/nginx/vip.oldboylinux/error.log notice;access_log /var/log/nginx/vip.oldboylinux/access.log main;charset utf8;autoindex on;autoindex_localtime on;autoindex_exact_size off;location / {index index.html;}location /svip/{auth_basic "input password";auth_basic_user_file /etc/nginx/user;}location /status{stub_status; ##显示nginx服务的状态,用户访问的状态}
}
##测试
9. 动态网站架构
9.1 概述
网站架构 | 说明与特点 | 性能 |
---|---|---|
静态网站 | 网站仅仅包含:html,css样式,js脚本,图 片,视频 ngx直接次处理的资源静态资源 | 只需要web服务器即可:nginx,可以承受较 高的访问量. 不支持动态的功能,注册,评论,静态网站功 能单一 |
动态网 站 | 动态网站一般是通过开发语言实 现:java,php,python,Golang... | 动态资源页面需要,服务器进行处理 nginx+php/tomcat +数据库 处理后把结果返回给用户 |
9.2 LNMP架构细节
9.3 部署一份开发的php代码
9.3.1 数据库准备
1. 数据库服务器地址:10.0.0.51/172.16.1.51
2. 数据库:mariadb
##安装数据库mariadb-server 服务端 mariadb 客户端
yum install -y mariadb-server
##启动服务
systemctl enable mariadb
systemctl start mariadb
##检查
ss -lntup |grep mysqld
ps -ef |grep mysql
数据库安全配置
mysql_secure_installation #仅仅刚安装的时候运行.仅首次运行即可.
Enter current password for root (enter for none):回车
Set root password? [Y/n] Y设置密码
Remove anonymous users? [Y/n] Y #删除数据库中的匿名用户(没有用户名的用户,容易导致安全问题)
Disallow root login remotely? [Y/n] Y #是否禁止root远程登录
Remove test database and access to it? [Y/n] Y ##是否删除test测试用的数据库
Reload privilege tables now? [Y/n] Y ##是否更新权限信息表
进入数据库内部
mysql -uroot -p1 ##-u后面接用户名,-p后面接自己自己设置的密码
##查看系统所有的数据库.
show databases;
##查看库里的表
show tables from mysql;
##创建数据库
create database wordpress;
#创建用户,进行授权
grant all on wordpress.* to 'wordpress'@'localhost' identified by '1'; ##可以通过172.16.1.%进行授权局域网访问,密码是1
grant all on wordpress.* to 'wordpress'@'172.16.1.%' identified by '1'; ##localhost表示只能在数据库本地使用.密码是1
##grant 所有权限 on 数据库.* to '用户名'@'白名单'
##删除数据库(极其危险)
drop database wordpress;
删除用户
drop user 'wordpress'@'172.16.1.%' ;
drop user 'wordpress'@'localhost' ;
#测试本地连接
mysql -uwordpress -p1
#测试远程连接
mysql -uwordpress -p1 -h 172.16.1.51 ##-h后面接数据库服务端地址
9.3.2 php准备
环境准备
##这里安装php7.x,具体看自己要求
##1. 配置yum源
[webtatic-php]
name = php Repository
baseurl = http://repo.webtatic.com/yum/el7/x86_64/
enabled =1
gpgcheck = 0
##2.安装php依赖
yum install -y php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mcrypt php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-pecl-memcached php72w-pecl-redis php72w-pecl-mongodb
##3. 启动
systemctl enable php-fpm
systemctl start php-fpm
##4. 检查
ss -lntup |grep php
ps -ef |grep php
统一nginx与php用户,需要修改php配置文件
vim /etc/php-fpm.d/www.conf
8:user = nginx
10:group = nginx
9.3.3 Nginx准备
##编写blog配置文件
server {listen 80;server_name blog.oldboylinux.cn;root /app/code/blog;access_log /var/log/nginx/blog/access.log main;error_log /var/log/nginx/blog/error.log notice;location / {index index.php;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}
##创建站点目录
mkdir -p /app/code/blog
##创建日志目录
mkdir -p log /var/log/nginx/blog/
测试nginx+php动态
##创建测试文件
vim /app/code/blog/index.php
<?php
phpinfo();
?>
测试php+mysql
vim /app/code/blog/index.php
<?php
##数据库地址
$db_host='172.16.1.51';
##数据库用户名
$db_user='wordpress';$db_pass='1';$link_id=mysqli_connect($db_host,$db_user,$db_pass);if($link_id){echo "mysql successful by oldboy xzb996!\n" ;}else{echo "connection failed!\n" ;}
?>
9.3.4 部署代码与设置权限
##解压
unzip wordpress-6.5.3-zh_CN.zip
mv wordpress/* /app/code/blog/
##修改权限
chown -R nginx.nginx /app/code/blog/
##浏览器解析访问