Nginx性能优化(下)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: Nginx性能优化(下)

3、try_files的使用(页面跳转)


  • 实验环境:


系统 ip 主机名 ngixn版本
Centos7.4 192.168.100.202 rzy nginx-1.18.0
Centos7.4 192.168.100.203 rzy02 nginx-1.18.0


  • 实验步骤


nginx的try_files按顺序检查文件是否存在,不存在就按照指定路径跳转


rzy配置:

******(1)使用源码包方式安装nginx(略)
******(2)修改配置文件,利用$uri进行本地页面跳转
[root@rzy ~]# vim /usr/local/nginx/conf/nginx.conf
。。。。。。 #修改文件,删除多余注释
 35     server {
 36         listen       80;
 37         server_name  localhost;
 38         root   html;
 39         index  index.html ;
 40         location / {
 41              try_files $uri $uri/ /aaa/index.html;  #uri判断默认目录下也就是访问的指定目录下有没有index.html文件的存在,存在则显示,不存在则通过$uri/重定向到/aaa/index.html,输出index.html的内容,这里的location是/默认匹配,即不管后面访问什么资源都进行跳转
 42         }
 43         error_page   500 502 503 504  /50x.html;
 44         location = /50x.html {
 45             root   html;
 46         }
 47     }
。。。。。。
#保存退出
[root@rzy ~]# cd /usr/local/nginx/html/ #进入默认的网页目录
[root@rzy html]# ll
总用量 8
-rw-r--r-- 1 root root 494 4月  21 00:03 50x.html
-rw-r--r-- 1 root root 612 4月  21 00:03 index.html
[root@rzy html]# echo "aaaaaaaaa" > index.html   #重新写一个页面
[root@rzy html]# /usr/local/nginx/sbin/nginx  #启动nginx
[root@rzy html]# curl 127.0.0.1  #访问本地测试是否可以正常访问
aaaaaaaaa
[root@rzy html]# mkdir aaa #在当前html目录下创建aaa目录
[root@rzy html]# echo "bbbbbbbbbb" > aaa/index.html #在aaa目录写一个页面
[root@rzy html]# rm -rf index.html  #删除当前html目录的index.html页面
[root@rzy html]# curl 127.0.0.1/afsdf #进行测试,发现就算不是访问aaa目录也能跳转到aaa目录的页面
bbbbbbbbbb
******(3)再次修改配置文件,利用porxy_pass和$uri进行网页跳转
[root@rzy html]# vim /usr/local/nginx/conf/nginx.conf
。。。。。。
 35     server {
 36         listen       80;
 37         server_name  localhost;
 38         root   html;
 39         index  index.html ;
 40         location / {
 41              try_files $uri @java_page; #配置眺转,这个@后面的字符只要跟下面的location匹配就行
 42         }
 43         location @java_page{
 44              proxy_pass http://192.168.100.203;  #配置跳转的java_page是http://192.168.100.203
 45         } 
 46         error_page   500 502 503 504  /50x.html;
 47         location = /50x.html {
 48             root   html;
 49         }
。。。。。。
#保存退出
[root@rzy html]# curl 127.0.0.1 #先进行访问
aaaaaaa
[root@rzy html]# ll
总用量 8
-rw-r--r-- 1 root root 494 4月  21 00:03 50x.html
drwxr-xr-x 2 root root  24 4月  21 00:08 aaa
-rw-r--r-- 1 root root   8 4月  21 00:10 index.html
[root@rzy html]# rm -rf index.html  #删除index.html
[root@rzy html]# killall -9 nginx  #关闭nginx
[root@rzy html]# /usr/local/nginx/sbin/nginx  #开启nginx使配置文件生效
[root@rzy html]# curl 127.0.0.1  #再次访问本地,发现访问的是192.168.100.203的页面,说明成功跳转
rzy-02

rzy02配置:

******(1)使用源码包方式安装nginx(略)
******(2)配置网页开启Nginx即可
[root@rzy02 ~]# echo "rzy-02" > /usr/local/nginx/html/index.html 
[root@rzy02 ~]# /usr/local/nginx/sbin/nginx 
[root@rzy02 ~]# curl 127.0.0.1
rzy-02

4、alias与root的区别


  • 实验环境:


系统 ip 主机名 ngixn版本
Centos7.4 192.168.100.202 rzy nginx-1.18.0


  • 实验步骤


******(1)使用源码包方式安装nginx
******(2)修改配置文件,root的作用
[root@rzy ~]# vim /usr/local/nginx/conf/nginx.conf
。。。。。。
 35     server {
 36         listen       80;
 37         server_name localhost;
 38         location /bbb/aaa {  #指定访问的资源,即用户访问服务器下的/bbb/aaa时,实际显示的时/html/bbb/aaa下的index,html
 39         root html;     #root只能写一个,location写了server就不能写了
 40         index index.html;
 41         }
 42     }
 43 }
。。。。。。
#保存退出
[root@rzy ~]# cd /usr/local/nginx/html/ 
[root@rzy html]# mkdir -p bbb/aaa
[root@rzy html]# mkdir -p bbb/aaa
[root@rzy html]# echo "aaaaaa" > bbb/aaa/index.html
[root@rzy html]# curl http://192.168.100.202/bbb/aaa/
aaaaaa   #实际访问的是/html/bbb/aaa/index.html
******(3)修改配置文件,alias的作用
[root@rzy html]# vim /usr/local/nginx/conf/nginx.conf
。。。。。。
 35     server {
 36         listen       80;
 37         server_name localhost;
 38         location /bbb/aaa {   #访问/bbb/aaa/时会跳转
 39         alias html;   #root修改为alias,会直接跳转
 40         index index.html;
 41         }
 42     }
。。。。。。
#保存退出
[root@rzy html]# echo "111111" > index.html
[root@rzy html]# killall -9 nginx
[root@rzy html]# /usr/local/nginx/sbin/nginx 
[root@rzy html]# curl http://192.168.100.202/bbb/aaa/ #再次访问发现直接跳转了
111111
******(4)alias和root的区别
root指定路径例如:
   location /bbb/aaa {
        root html;
        index index.html;
        }
location指定资源,即用户访问这个资源的时候location中的配置才会生效,location / 默认匹配则全部生效
这里的配置,即用户访问/bbb/aaa/资源时,location中的配置生效,root其实就是又加了一个根路径。用户实际访问变成了/html/bbb/aaa/下的资源
alias指定路径例如:
   location /bbb/aaa {
        alias html;
        index index.html;
        }
这里的location和上面的相同。都是用户访问/bbb/aaa的资源才会生效
alias在用户界面的命令中就是别名的意思,在这里也一样的,用户实际访问直接变成了/html/下的资源


5、获取用户真实ip


  • 实验环境:


系统 ip 主机名 ngixn版本
Centos7.4 192.168.100.202 rzy nginx-1.18.0
Centos7.4 192.168.100.203 rzy02 nginx-1.18,0


  • 实验步骤


rzy配置

******(1)使用源码包方式安装nginx(略)
******(2)修改配置文件
[root@rzy html]# vim /usr/local/nginx/conf/nginx.conf
。。。。。。
 35     server {
 36         listen       80;
 37         server_name localhost;
 38         root html;
 39         index index.html ;
 40         location / {
 41           try_files $uri @aaa;    #配置网页调转
 42         }
 43         location @aaa {
 44              proxy_pass http://192.168.100.203;  #跳转到100.203
 45         }
 46     }
 47 }
。。。。。。
#保存退出
[root@rzy html]# killall -9 nginx
[root@rzy html]# /usr/local/nginx/sbin/nginx  #重启


rzy02配置


******(1)使用源码包方式安装nginx(略)
******(2)配置网页目录和开启 Nginx即可
[root@rzy02 ~]# echo "rzy-02" > /usr/local/nginx/html/index.html 
[root@rzy02 ~]# /usr/local/nginx/sbin/nginx 
[root@rzy02 ~]# curl 127.0.0.1
rzy-02

先使用本机浏览器访问,发现可以成功眺转

20210511092014957.png

******(1)分别查看两台服务器的nginx访问日志
rzy:
[root@rzy html]# tail -1 /usr/local/nginx/logs/access.log  
192.168.100.230 - - [21/Apr/2021:01:13:50 +0800] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.100.202/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400"
#可以发现是100.230访问了rzy
rzy02:
[root@rzy02 ~]# tail -1 /usr/local/nginx/logs/access.log 
192.168.100.202 - - [21/Apr/2021:00:42:48 +0800] "GET /favicon.ico HTTP/1.0" 404 555 "http://192.168.100.202/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400"
#但是在rzy02只看到是rzy访问了,看不到是谁真正的访问了它
******(2)配置rzy来使rzy02可以看到真正访问它的ip地址
[root@rzy html]# vim /usr/local/nginx/conf/nginx.conf
。。。。。。
 35     server {
 36         listen       80;
 37         server_name localhost;
 38         root html;
 39         index index.html ;
 40         location / {
 41           try_files $uri @aaa;
 42         }
 43         location @aaa {
 44             proxy_pass http://192.168.100.203;
 45             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #添加这段配置
 46         }
 47     }
 48 }
。。。。。。
#保存退出
[root@rzy html]# killall -9 nginx                                                                              
[root@rzy html]# /usr/local/nginx/sbin/nginx  #重新启动nginx
******(3)再次使用本机的浏览器访问rzy,然后查看日志
rzy:
[root@rzy html]# tail -1 /usr/local/nginx/logs/access.log 
192.168.100.230 - - [21/Apr/2021:01:19:46 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400"
rzy02:
[root@rzy02 ~]# vim /usr/local/nginx/conf/nginx.conf
。。。。。。
 21     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  #把这三行去掉注释,让配置项生效
 22                       '$status $body_bytes_sent "$http_referer" '
 23                       '"$http_user_agent" "$http_x_forwarded_for"';
 24 
。。。。。。
#保存退出
[root@rzy02 ~]# killall -9 nginx
[root@rzy02 ~]# /usr/local/nginx/sbin/nginx  #重启服务
[root@rzy02 ~]# > /usr/local/nginx/logs/access.log  #清空日志
[root@rzy02 ~]# tail -f /usr/local/nginx/logs/access.log   #tail -f 即实时查看
192.168.100.202 - - [21/Apr/2021:00:54:14 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400" "192.168.100.230"
#发现在日志的最后增加了一个ip地址,而这个ip就是访问rzy02的真实ip


6、网站访问原理


  • DNS流程,即解析域名


  1. 先查询本地hosts文件
  2. 请求本地localDNS
  3. 返回对应的IP地址


  • HTTP连接


1.首先先建立TCP连接,即TCP的三次握手,发送请求内容、请求起始行、请求头部、请求的主体


将请求传递给负载均衡,通过负载均衡做出相应的请求调度


如果请求的是静态页面,那么会将请求调度到对应的静态集群解析


如果请求的是动态页面,那么会将请求调度到对应的动态集群解析


如果仅仅是请求页面,那么可以会通过Opcache


2.如果请求的页面需要查询数据库,或者是往数据库输入内容,那么就需要进行检查


检查对应的操作是查询还是写入,如果是查询数据库

会检查查询的内容是否有缓存,如果有缓存则返回,没有缓存则开始从数据库查询数据

检查查询语句,将查询结果返回


3.返回对应客户端的请求内容至WEB节点


4.WEB节点收到请求后返回内容至负载均衡


5.负责均衡返回客户端内容,然后TCP连接断开,即TCP的四次断开


6.HTTP断开连接


  • 按照分层结构,每一层都有其对应的缓存机制


image.png

7、Nginx优化方案总结


  1. Gizp压缩
  2. Expires静态文件缓存
  3. 调整网络IO模型,调整Nginx worker进程的最大连接数
  4. 隐藏Nginx名称和版本号
  5. 配置防盗链,防止资源被盗用
  6. 禁止通过ip地址访问,进程恶意域名解析,只允许域名访问
  7. 防止DDos、CC攻击,限制单ip并发请求连接
  8. 配置错误页面,根据错误代码指定网页反馈用户
  9. 限制上传资源目录被程序访问,防止木马入侵系统
  10. Nginx加密传输优化


接**


1.首先先建立TCP连接,即TCP的三次握手,发送请求内容、请求起始行、请求头部、请求的主体


将请求传递给负载均衡,通过负载均衡做出相应的请求调度


如果请求的是静态页面,那么会将请求调度到对应的静态集群解析


如果请求的是动态页面,那么会将请求调度到对应的动态集群解析


如果仅仅是请求页面,那么可以会通过Opcache


2.如果请求的页面需要查询数据库,或者是往数据库输入内容,那么就需要进行检查


检查对应的操作是查询还是写入,如果是查询数据库

会检查查询的内容是否有缓存,如果有缓存则返回,没有缓存则开始从数据库查询数据

检查查询语句,将查询结果返回


3.返回对应客户端的请求内容至WEB节点


4.WEB节点收到请求后返回内容至负载均衡


5.负责均衡返回客户端内容,然后TCP连接断开,即TCP的四次断开


6.HTTP断开连接


  • 按照分层结构,每一层都有其对应的缓存机制


image.png

7、Nginx优化方案总结


  • Gizp压缩
  • Expires静态文件缓存
  • 调整网络IO模型,调整Nginx worker进程的最大连接数
  • 隐藏Nginx名称和版本号
  • 配置防盗链,防止资源被盗用
  • 禁止通过ip地址访问,进程恶意域名解析,只允许域名访问
  • 防止DDos、CC攻击,限制单ip并发请求连接
  • 配置错误页面,根据错误代码指定网页反馈用户
  • 限制上传资源目录被程序访问,防止木马入侵系统
  • Nginx加密传输优化
目录
相关文章
|
应用服务中间件 Linux PHP
深入理解Nginx工作原理及优化技巧(上)
深入理解Nginx工作原理及优化技巧
深入理解Nginx工作原理及优化技巧(上)
|
3月前
|
应用服务中间件 Linux 调度
干货!几个 Nginx 性能优化方法
干货!几个 Nginx 性能优化方法
143 0
|
1月前
|
缓存 监控 负载均衡
nginx相关配置及高并发优化
Nginx的高并发优化是一个综合性的过程,需要根据具体的业务场景和硬件资源量身定制。以上配置只是基础,实际应用中还需根据服务器监控数据进行持续调整和优化。例如,利用工具如ab(Apache Benchmarks)进行压力测试,监控CPU、内存、网络和磁盘I/O等资源使用情况,确保配置的有效性和服务的稳定性。
107 0
|
4月前
|
缓存 负载均衡 中间件
中间件Nginx性能瓶颈
【7月更文挑战第12天】
211 13
|
6月前
|
应用服务中间件 网络安全 nginx
Nginx性能调优策略
Nginx性能调优策略
83 0
Nginx性能调优策略
|
6月前
|
安全 应用服务中间件 Linux
高并发下Nginx优化(一)
【4月更文挑战第15天】高并发下Nginx优化
131 0
|
缓存 应用服务中间件 Linux
深入理解Nginx工作原理及优化技巧(下)
深入理解Nginx工作原理及优化技巧
|
安全 关系型数据库 MySQL
Nginx性能优化(上)
Nginx性能优化
170 0
Nginx性能优化(上)
|
存储 缓存 网络协议
Nginx-性能优化
Nginx-性能优化
|
缓存 监控 安全