一、Ngx处理用户请求
1、案例与思考
案例01: 思考之前搭建的cxk.cn网站,使用域名访问或ip访问都是没有问题的.如果把配置文件名game.cxk.cn.conf使用域名或ip访问或怎么样?
结果
- 域名访问网站没有任何问题
- 使用ip访问则显示静态页面,另外一个网站了.
原因
IP访问:选择默认server文件
选择server默认,端口后加 default_server
arduino
server {
listen 80 default_server;
2、处理用户请求流程
1、DNS解析:域名->IP地址
2、连接80端口:tcp3次握手与网站的80端口建立连接
3、http请求豹纹:请求方法,URI,HOST等信息!
- GET /index.html
- H0ST: cxk.cn
- User-Agent:Chrome/xxx
4、ngx处理
- http请求,http区域处理
-
不同的server{}区域(子配置文件)处理
- 端口
- 域名:用户请求的域名与子配置文件server_name进行匹配
- 匹配成功,就让对应的子配置文件(server{})处理
- 根据了配置文件的,root,location规则,index进行处理查找文件把找到的文件发回给用户
5、http响应报文:
- 状态码:200 ok
- server信息
- 其他信息
- 文件内容
6、客户收到文件内容,浏览器解析,进行展示
二、虚拟主机
1、概述与分类
虚拟机的分类 | 说明 | 应用场景 |
---|---|---|
基于域名的虚拟主机 | 不同域名访问不同的站点 | 生产环境最常用的 |
基于端口的虚拟主机 | 不同端口访问不同的站点 | 保护,设置特殊端口.1024以上 8888 18888 |
基于ip的虚拟主机 | 不同ip访问不同的站点. | 保护,用户只能通过某个ip连接进来. 用来限制网站只能通过指定的ip进行访问内网ip,vpn ip. |
2、基于域名的虚拟主机
不同域名访问不同的主机.
案例02: 创建test.cn网站 站点目录/app/code/test/ 书写配置文件.
1.完成后不创建站点目录进行访问看看报什么错误.
2.创建站点目录后再访问看看报什么错误.
3.创建首页文件和内容,访问看看显示什么.
书写配置文件
ini
[root@nanjing conf.d]# cat test.conf
server{
listen 80;
server_name test.cn;
root /app/code/test;
location / {
index index.html;
}
}
加载配置文件systemctl reload nginx
测试问题1:
完成后不创建站点目录进行访问看看报什么错误. 404
typescript
[root@nanjing conf.d]# curl -v -H Host:test.cn http://43.137.51.152/index.html
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.25.4</center>
</body>
</html>
本地测试域名的小技巧(linux):节省修改本地Hosts
curl -v -H "Host: cxk.test.cn" http: 10.0.0.7/index.html
-H 修改请求头里面的内容.
测试问题2:
创建站点目录后再访问看看报什么错误.
403无首页文件,通常也表示权限拒绝!!!
测试问题3:
测试创建首页文件后访问。正常内容
3、基于端口的虚拟主机
不同的端口访问不的网站.
ini
server{
listen 81;
server_name live.test.cn;
root /app/code/live;
location / {
index index.html;
}
}
浏览器
http://10.0.0.7:81/index.html
4、基于ip的虚拟主机
搭建mimi网站,端口是8888,只能通过172.16.1.7内网访问
ini
server{
listen 172.16.1.7:8888;
server_name mimi.cn;
root /app/code/mimi;
location / {
index index.html;
}
}
浏览器
http://10.0.0.7:81/index.html
三、Ngx日志
1、概述
日志 | 使用建议 | 定义 | 使用 |
---|---|---|---|
错误日志 | 发生故障的时候可以查看,4xx,5xx | 通过错误级别指定 | error_log |
访问日志 | 记录用户什么时候访问,网站哪些页面,客户端信息 | 通过Log_format定义访问日志的格式 | access_log |
2、错误日志
error_log |
---|
格式:error_log 文件名 错误日志级别; |
指令放在哪:main,http,mail,stream,server,location |
lua
错误日志级别;:左到右,越来越粗糙. 记录信息的详细程度.
debug, info, notice, warn, error, crit, alert, oremerg.
error
notice
debug: 未来用于调试使用,短时间开启,网站访问量特别大不开
生产建议
案例03:给每个虚拟主机指定自己独立的错误日志
ini
在/etc/nginx/nginx.conf中注释#error_log /var/log/nginx/error.log notice;
[root@nanjing conf.d]# cat cxk.conf
server{
listen 80;
server_name cxk.cn;
error_log /etc/nginx/conf.d/cxk.cn.log notice;
root /app/code/cxk;
location / {
index index.html;
}
}
3、访问日志
辅助我们进行分析,网站访问量,ip,pv.
log_format 指定访问日志的格式 |
---|
log_format 格式名称 格式.....; |
放在那里:http |
Ngx访问日志格式(ngx内置变量) | 说明 |
---|---|
$remote_addr | 客户端IP |
$remote_user | 用户名(空,进行认证用户) |
$remote_local | 时间 30/Aug/2022:14:44:27 +0800 |
$requst | 请求报文的起始行(请求方法 URI HTTP/1.1) |
$status | http状态码 |
$body_bytes_sent | 响应给客户的文件的大小,响应报文的主体大小(文件大小) 单位字节 |
$http_referer | 从哪里跳转,访问到这个网站的. 网站运营分析 |
$http_usr_agent | 客户端代理(浏览器) |
$http_x_forwarded _for | XFF头,负载中使用,记录用户真实的ip地址. |
ini
在/etc/nginx/nginx.conf中注释# access_log /var/log/nginx/access.log main;
[root@nanjing conf.d]# cat cxk.conf
server{
listen 80;
server_name cxk.cn;
error_log /etc/nginx/conf.d/cxk.cn.error.log notice;
access_log /etc/nginx/conf.d/cxk.cn.access.log main;
root /app/code/cxk;
location / {
index index.html;
}
}
访问日志其他选项access_log(了解,未来根据需要进行配置)
access_log | 说明 |
---|---|
访问日志进行压缩 | gzip需要通过zcat/zless/zgrep查看 |
进行缓存 | buffer32k 先把日志写入到内存中,定期写入到磁盘 |
定义刷新时间 | flush=10s |
ini
access_log /var/log/nginx/cxk.cn.access.log main gzip buffer=32k flush=10s;
四、location规则
URL处去域名就是URI
location匹配uri
1、项目一:限制访问管理页面
域名:buy.com
站点目录:/app/code/buy/
后台管理页面:/app/code/buy/admin/index.html
要求后台限制网段访问:43.137.51.0/24网段.
1、编辑配置文件
ini
[root@nanjing conf.d]# cat buy.com.conf
server{
listen 80;
server_name buy.com;
root /app/code/buy;
location / {
index index.html;
}
#buy.com/admin
#uri:/admin/
location /admin/{
#允许43.137.51.0/24网段访问
allow 43.137.51.0/24;
#拒绝所有
deny all;
}
}
2、创建目录文件and刷新配置文件
typescript
[root@nanjing conf.d]# mkdir -p /app/code/buy/admin
[root@nanjing conf.d]# echo "give me buy buy" > /app/code/buy/index.html
[root@nanjing conf.d]# echo "store manage" > /app/code/buy/admin/index.html
[root@nanjing conf.d]# nginx -t
[root@nanjing conf.d]# systemctl reload nginx
3、测试
arduino
[root@nanjing conf.d]# curl -H Host:buy.com http://43.137.51.152:80
give me buy buy
[root@nanjing conf.d]# curl -H Host:buy.com http://43.137.51.152:80/admin/index.html
store manage
其他主机
2、项目二:配置缓存expires
浏览器访问网站的缓存信息
ini
server{
listen 80;
server_name buy.com;
root /app/code/buy;
location / {
index index.html;
}
#uri包含 .html或.js或.css 缓存1天
location ~* .(html|js|css)$ {
expires max;
#expires 1d;
}
#uri包含 .jpg 或 .jpeg 或 .png 或 .gif 或 .bmp
location ~* .(jpg|jpeg|png|gif|bmp)$ {
expires 1h;
}
}