Web集群-Nginx(二)
一、Nginx处理用户请求流程
思考问题:之前搭建的cxk.oldboylinux.cn网站,使用域名访问或ip访问都是没有问
题的.如果把配置文件名game.cxk.oldboylinux.cn.conf使用域名或ip访问或怎么样?
答案:
- 域名访问网站没有任何问题.
- 使用ip访问则显示静态页面,另外一个网站了
域名访问正常:
IP访问异常
为什么是这样?它的详细原理是什么。
1.1 详细原理
使用域名访问网站的流程图示如下:
1.1.1 正常流程步骤
1、DNS解析:cxk.oldboylinux.cn –> 10.0.0.7
2、连接80端口:TCP三次握手与网站80端口建立连接
3、发送HTTP请求报文:
4、nginx处理:
- http请求,http区域处理
- 不同server{}区域(子配置文件)处理
- 端口
- 域名:用户请求的域名与子配置文件server_name进行匹配
- 匹配成功,就让对应的子配置文件(server{})处理
- 根据子配置文件的,root,location规则,index进行处理查找文件.
- 把找到的文件发回给用户
5、HTTP响应报文:
- 状态码:200 ok
- server信息
- 其他信息
- 文件内容
6、客户收到文件,浏览器解析,进行展示
1.1.2 请求域名不存在的流程
对于没有正确匹配到请求域名的访问:
没有配置/指定默认的虚拟主机(子配置文件)
配置了默认站点让用户访问
此流程只适应于没有配置过虚拟主机的域名,如果域名已经配置过server{},只是
没有找到对应的文件,则还是会返回404
二、虚拟主机
在第一章中老师提到虚拟主机
,它到底是什么?
- 一个虚拟主机:相当于是一个网站,在nginx中通过
server{}
区域实现
- 虚拟主机有不同的类型,配置也相同
2.1 概述和分类
虚拟主机的类型和介绍
虚拟主机的分类 |
说明 |
应用场景 |
基于域名的虚拟主机 |
不同域名访问不同的站点. |
生产环境最常用的. |
基于端口的虚拟主机 |
不同端口访问不同的站点. |
保护,设置特殊端口.1024以上 8888 18888 |
基于IP的虚拟主机 |
不同IP访问不同的站点. |
保护,用户只能通过某个ip连接进来. 用来限制网站只能通过指定的ip进行访问内网ip,vpn ip. |
2.2 基于域名的虚拟主机
顾名思义:通过不同域名访问不同的主机
案例:创建bird.oldboylinux.cn网站,站点目录/app/code/bird/
,书写配置文件.
思考:
1.完成后不创建站点目录进行访问看看报什么错误.
2.创建站点目录后再访问看看报什么错误.
3.创建首页文件和内容,访问看看显示什么
补充思考:
访问一个完全没配置过虚拟主机的域名会怎样?
书写配置:
测试:
- 完成后不创建站点目录进行访问看看报什么错误?
- 创建站点目录后再访问看看报什么错误
- 创建首页文件和内容,访问看看显示什么
- 访问一个完全没配置过虚拟主机的域名会怎样
- hosts设置,
10.0.0.7 test.oldboylinux.cn
- 访问显示bird的页面,说明
1.1.2
小节流程有效
本地测试域名的小技巧(linux)
2.3 基于端口的虚拟主机
顾名思义:根据不同的端口,访问不同的网站
案例:
测试访问:
命令:
浏览器
2.4 基于IP的虚拟主机
搭建mimi网站,端口是8888,只能通过172.16.1.7内网访问
在listen字段需要绑定IP
测试访问
三、Nginx日志
主要内容:
- 如何给每个虚拟主机指定自己独立的错误日志
- 如何给每个虚拟主机指定自己独立的访问日志
3.1 概述
错误日志和访问日志的定义
日志 |
使用建议 |
定义 |
使用 |
错误日志 |
发生故障的时候可以查看,4xx,5xx |
通过错误级别指定 |
error_log |
访问日志 |
记录着用户什么时候访问 网站哪些页面,客户端信息. |
通过log_format定义访问日志的格式 |
access_log |
3.2 错误日志
指定错误日志的位置和错误日志级别
错误日志级别
级别 |
定义 |
debug |
记录调试信息 |
info |
记录一般信息 |
notice |
记录不影响操作的信息 |
warn |
记录警告信息 |
error |
记录错误信息 |
crit |
记录严重的错误信息 |
alert |
记录必须立即处理的信息 |
emerg |
记录紧急的信息 |
debug: 未来主要用于调试使用,短时间开启,在网站访问量较大时别开
案例:给每个虚拟主机指定自己独立的错误日志
**注意:**如开启独立错误日志,需要把nginx.conf里面的error_log注释
3.2 访问日志
3.2.1 日志格式配置
辅助我们进行分析,如网站访问量,ip,pv,访问日志设置的格式
访问日志格式
Ngx访问日志格式(ngx内置变量) |
说明 |
$remote_addr |
客户端ip地址 |
$remote_user |
用户名(空,进行认证用户) |
$time_local |
时间 30/Aug/2022:14:44:27 +0800 |
$request |
请求报文的起始行(请求方法 URI HTTP/1.1) |
$status |
http状态码 |
$body_bytes_sent |
响应给客户的文件的大小,响应报文的主体大小(文件大小) 单位字节 |
$http_referer |
从哪里跳转,访问到这个网站的. 网站运营分析 |
$http_user_agent |
客户端代理(浏览器) |
$http_x_forwarded_for |
XFF头,负载中使用,记录用户真实的ip地址. |
日志格式配置
3.2.2 访问日志配置
access_log指定日志,使用对应格式
案例:给每个虚拟主机指定自己独立的访问日志
**注意:**如开启独立错误日志,需要把nginx.conf里面的access_log注释
查看效果
3.2.3 访问日志其他选项
了解即可,未来根据需要进行配置
access_log |
说明 |
访问日志进行压缩 |
gzip需要通过zcat/zless/zgrep查看 |
进行缓存 |
buffer = 32k 先把日志写入到内存中,定期写入到磁盘 |
定义刷新时间 |
flush =10s |
配置如下:
四、Location规则
通过两个案例来了解location规则
4.1 location概述
ngx的location规则,也叫路由规则
- 在ngx用于匹配用户请求中的uri,ngx对用户请求中的uri进行判断.
- 如果用户请求的uri是xxxx,则做xxxx.
URI和URL的区别
URL:网址 https://nginx.org/en/docs/
URI:/en/docs/
对比:http://www.baidu.com/lidao/lidao.avi
URI:/lidao/lidao.avi 域名后面的内容
URL: http://www.baidu.com/lidao/lidao.avi 网址
对比:http://www.baidu.com
URI: / 域名后面的内容
URL: http://www.baidu.com 网址
location规则说明
location规则 |
说明 |
⭐location / {xxxx} |
默认规则,保底,location规则在进行匹配的时候,其他的规则都匹配失败了,这时候匹 配默认的规则. |
⭐location /image/ {} |
用于匹配请求的uri (路径) cxk.oldboylinux.cn/image/lidao.txt ✅ |
⭐location ~ . (jpg|jpeg)$ {} |
支持正则,区分大小写 cxk.oldboylinux.cn/lidao/lidao.jpg |
⭐location ~* . (jpg|jpeg)$ {} |
支持正则,不区分大小写 cxk.oldboylinux.cn/lidao/lidao.jpg |
location ^~ /lidao/ |
不支持正则,仅仅匹配普通字符,很少使用,优先. |
location = /50x.html |
不支持正则,精确匹配,使用较少. |
location @名字 {} |
命名的location一般用于return/error_log 跳转. |
location匹配优先级
优先级 |
符号 |
1 |
= |
2 |
^~ |
3 |
、* |
4 |
/image/ |
5 |
/ |
4.2 location案例1
案例:搭建大型直播购物网站
配置虚拟主机:
添加网页文件
测试访问
4.3 location案例2
案例:搭建bird小鸟飞飞网站,给网站加速,设置缓存,网站中html、js、css结
尾的文件缓存1天,图片缓存1小时 。
缓存了解:
基本配置浏览器访问并没有缓存
配置:
网页内容
测试访问正常
chrome浏览器F12开启缓存查看
缓存生效
4.4 location案例3
以上的访问优先级是什么?
测试访问