一、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; 
 }
}
        3、location规则小结

