Nginx服务优化(由浅到深)!
Posted handsomeboy-东
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx服务优化(由浅到深)!相关的知识,希望对你有一定的参考价值。
nginx服务优化
Nginx服务优化
Nginx隐藏版本号
生产环境中为避免攻击者针对Nginx版本来进行攻击,需要隐藏版本号
查看版本号方式:
- (1)查看头部信息
[root@localhost ~]# curl -I 192.168.43.150
HTTP/1.1 200 OK
Server: nginx/1.15.9 #这里可以看到版本号
Date: Wed, 23 Jun 2021 10:35:42 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 22 Jun 2021 09:44:24 GMT
Connection: keep-alive
ETag: "60d1b0f8-264"
Accept-Ranges: bytes
- (2)在谷歌浏览器按F12键
隐藏版本号的方式:
- (1)通过修改配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
[root@localhost ~]# systemctl restart nginx.service
[root@localhost ~]# curl -I 192.168.43.150
HTTP/1.1 200 OK
Server: nginx #可以看到版本号已隐藏
Date: Wed, 23 Jun 2021 10:48:40 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 22 Jun 2021 09:44:24 GMT
Connection: keep-alive
ETag: "60d1b0f8-264"
Accept-Ranges: bytes
- (2)通过修改Nginx源码文件
[root@localhost ~]# vim /opt/nginx-1.15.9/src/core/nginx.h #修改源码文件
重新编译安装Nginx
[root@localhost nginx-1.15.9]# ./configure --prefix=/usr/local/nginx --usr=nginx --group=nginx --with-http_stub_status
[root@localhost nginx-1.15.9]# make && make install
[root@localhost nginx-1.15.9]# vim /usr/local/nginx/conf/nginx.conf
[root@localhost nginx-1.15.9]# systemctl stop nginx.service
[root@localhost nginx-1.15.9]# systemctl start nginx.service
[root@localhost nginx-1.15.9]# curl -I 192.168.43.150
HTTP/1.1 200 OK
Server: apache/1.1.1 #可以看到版本已隐藏
Date: Wed, 23 Jun 2021 11:05:17 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 22 Jun 2021 09:44:24 GMT
Connection: keep-alive
ETag: "60d1b0f8-264"
Accept-Ranges: bytes
修改用户与组
在安装前没有创建用户时,则在此服务中默认使用的事nobody
[root@localhost nginx-1.15.9]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件
验证结果
配置网页缓存时间
设置网页缓存时间,方便用户访问,一般只针对静态页面进行设置
[root@localhost nginx-1.15.9]# vim /usr/local/nginx/conf/nginx.conf
[root@localhost html]# systemctl restart nginx.service
[root@localhost nginx-1.15.9]# cd /usr/local/nginx/html/ #进入放置网页目录下上传一张图片
[root@localhost html]# ls
50x.html
bbs
index.html
index.php
Snipaste_2021-06-23_17-30-02.png
[root@localhost html]# vim index.html
[root@localhost html]# systemctl restart nginx.service #重启服务
进入浏览器查看
也可以用curl命令查看
[root@localhost html]# curl -I 192.168.43.150/Snipaste_2021-06-23_17-30-02.png
HTTP/1.1 200 OK
Server: apache/1.1.1
Date: Wed, 23 Jun 2021 11:47:08 GMT
Content-Type: image/png
Content-Length: 381959
Last-Modified: Wed, 23 Jun 2021 09:30:10 GMT
Connection: keep-alive
ETag: "60d2ff22-5d407"
Expires: Thu, 24 Jun 2021 11:47:08 GMT
Cache-Control: max-age=86400 #这里可以看到缓存时间
Accept-Ranges: bytes
日志切割
随着Nginx运行时间的增加,其日志的大小也随之增加,为了防止日志太大不利于管理员的监控,需要通过Nginx信号控制功能的脚本时间日志的自动切割
用shell脚本编写实现日志切割
[root@localhost ~]# vim fenge.sh
#!/bin/bash
#Filename:fenge.sh
d=$(date -d "-1 day""+%Y%m%d") #显示一天前的时间
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path
mv /usr/local/nginx/logs/access.log $logs_path/test.com-access.log-$d
kill -USR1 $(cat $pid_path) #重载nginx生成新的access日志
find $logs_path -mtime +30 | xargs rm -rf #删除30天前的日志
[root@localhost ~]# chmod +x fenge.sh
[root@localhost ~]# sh -x fenge.sh #测试脚本
++ date -d '-1 day' +%Y%m%d
+ d=20210623
+ logs_path=/var/log/nginx
+ pid_path=/usr/local/nginx/logs/nginx.pid
+ '[' -d /var/log/nginx ']'
+ mv /usr/local/nginx/logs/access.log /var/log/nginx/test.com-access.log-20210623
++ cat /usr/local/nginx/logs/nginx.pid
+ kill -USR1 23863
+ find /var/log/nginx -mtime +30
+ xargs rm -rf
[root@localhost ~]# ./fenge.sh
[root@localhost ~]# ls /var/log/nginx/
test.com-access.log-20210623
[root@localhost ~]# date -s 20210625 #将系统时间调为明天
2021年 06月 25日 星期五 00:00:00 CST
[root@localhost ~]# ./fenge.sh #再执行脚本
[root@localhost ~]# ls /var/log/nginx/ #查看日志
test.com-access.log-20210623 test.com-access.log-20210624
[root@localhost ~]# crontab -e
0 0-3 * * * /root/fenge.sh #设置定时计划,每天0点至3点执行脚本
设置连接超时
为了避免客户长时间占用连接,造成资源浪费,可设置连接超时
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
Nginx优化深入
更改进程数
在高并发时,可开启更多Nginx进程用以快速响应用户的请求
[root@localhost ~]# cat /proc/cpuinfo | grep -c "physical" #查看cpu核数
8
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
[root@localhost ~]# ps aux | grep nginx
root 23863 0.0 0.0 20560 840 ? Ss 6月24 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 23864 0.0 0.0 23016 1664 ? S 6月24 0:00 nginx: worker process
root 25673 0.0 0.0 112724 988 pts/1 S+ 00:24 0:00 grep --color=auto nginx
[root@localhost ~]# systemctl restart nginx.service
[root@localhost ~]# ps aux | grep nginx 查看进程
root 25835 0.0 0.0 20560 652 ? Ss 00:34 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 25836 0.0 0.0 23016 1396 ? S 00:34 0:00 nginx: worker process
nginx 25837 0.0 0.0 23016 1420 ? S 00:34 0:00 nginx: worker process
root 25847 0.0 0.0 112724 988 pts/1 S+ 00:34 0:00 grep --color=auto nginx
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件开启四个进程
[root@localhost ~]# systemctl restart nginx.service
[root@localhost ~]# ps aux | grep nginx
root 25885 0.0 0.0 20560 652 ? Ss 00:37 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 25886 0.0 0.0 23016 1420 ? S 00:37 0:00 nginx: worker process
nginx 25887 0.0 0.0 23016 1416 ? S 00:37 0:00 nginx: worker process
nginx 25888 0.0 0.0 23016 1420 ? S 00:37 0:00 nginx: worker process
nginx 25889 0.0 0.0 23016 1420 ? S 00:37 0:00 nginx: worker process
root 25891 0.0 0.0 112724 988 pts/1 S+ 00:37 0:00 grep --color=auto nginx
配置网页压缩
Nginx服务有自带压缩模板,允许Nginx服务器将输出内容发送到客户端之前进行压缩,以节约网站的宽带,提升用户访问体验
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件
配置防盗链
在企业网站服务中,要设置防盗链功能来避免网站内容被非法盗用,造成经济损失
设备准备:一台CentOS7作为盗链端安装nginx服务,一台CentOS7作为服务端安装nginx服务,一台win10系统访问,关闭所有防火墙
(1)先配置盗链
服务端:
[root@localhost ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.43.150 netmask 255.255.255.0 broadcast 192.168.43.255
inet6 fe80::fee0:5929:f3f8:11bc prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:08:13:3d txqueuelen 1000 (Ethernet)
RX packets 26755 bytes 3851298 (3.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 40908 bytes 11019318 (10.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# vim /etc/hosts #设置域名和ip映射关系
192.168.43.150 www.bt.com
[root@localhost ~]# cd /usr/local/nginx/html/ #将图片放在服务端
[root@localhost html]# ls
50x.html bbs index.html index.php Snipaste_2021-06-23_17-30-02.png
盗链端:
[root@nginx ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.43.66 netmask 255.255.255.0 broadcast 192.168.43.255
inet6 fe80::792f:d024:3150:cf1d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:39:c8:59 txqueuelen 1000 (Ethernet)
RX packets 963339 bytes 1313244142 (1.2 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 470025 bytes 35664798 (34.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@nginx ~]# vim /etc/hosts #设置域名和IP地址映射
192.168.43.66 www.test.com
Win10添加映射并访问网页
第一次更改hosts文件需要对其提权
确认后再配置文件中添加域名IP地址映射关系,保存
访问域名测试
在盗链端配置盗链
[root@nginx ~]# vim /usr/local/nginx/html/index.html
在win10上访问盗链端域名,右键可查看图片为盗用,注意,每次重新查看网页是记得清理缓存
(2)配置防盗链
[root@nginx ~]# cd /usr/local/nginx/html/ #将盗链错误图片放在网页目录下
[root@nginx html]# ls
50x.html bbs index.html index.php Snipaste_2021-06-23_17-30-02.png Snipaste_2021-06-24_22-57-19.png#此为错误图片
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件
FPM参数优化
Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整,FPM进程有两种启动方式,static将产生固定数据的fpm进程,dynamic将以动态方式产生fpm进程
[root@nginx ~]# vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid
pm = dynamic
pm.max_children=20 #static模式下空闲进程数上限,大于下面的值
pm.start_servers=5 #动态方式下默认开启的进程数,在最小和最大之间
pm.min_spare_servers=2 #动态方式下最少空闲进程数
pm.max_ppare_servers=8 #动态方式下最大空闲进程数
总结
- Nginx 服务优化包括隐藏版本号、更改用户和组、配置网页缓存时间、日志切割、设置连接超时
- Nginx服务深入优化包括更改进程数、配置网页压缩、配置防盗链和FPM参数优化
- Nginx优化提高用户体验、提高服务端运行效率
以上是关于Nginx服务优化(由浅到深)!的主要内容,如果未能解决你的问题,请参考以下文章