一 .Nginx 服务优化
在企业信息化应用环境中,服务器的安全性和响应速度需要根据实际情况进行相应参数配置,以达到最优的用户体验。Nginx默认的安装参数只能提供最基本的服务,需要调整如网页缓存时间、连接超时、网页压缩等相应参数,才能发挥出服务器的最大作用。
1.隐藏版本号
在生产环境中,需要隐藏 Nginx 的版本号,以避免泄漏 Nginx 的版本,使攻击者不能针对特定版本进行攻击。隐藏 Nginx版本号有两种方式,第一种是修改Nginx的主配置文件,第二种是修改 Nginx源码文件,指定不显示版本号。
(1)修改配置文件方式
将 Nginx 主配置文件中的 server_tokens 选项值设置为 off,如没有该配置项,加上即可。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
http {
server_tokens off;关闭版本号
}
在浏览器中用IP地址测试
(2)设置版本信息
Nginx 源码文件 nginx-1.12.0/src/core/nginx.h 包含了版本信息,可以随意设置,然后重新编译安装,隐藏版本信息。
[root@www ~## vim nginx-1.12.0/src/coreinginx.h/编辑源码文件
#define NGINX VERSION “1.1.1” //修改版本号
#define NGINX VER "IIS" NGINX VERSION //修改服务器类型
[root@www ~]# cd nginx-1.12.0/
[root@www nginx-1.12.0]#./configure --prefix/usr/local/nginx --user=nginx --group=nginx --with.http_stub_status_module && make && make install
[root@www nginx-1.12.0]# cd /usr/local/nginx/conf/
[root@www conf]# vim nginx.conf
http {
indude mime.types;
default_type application/octet-stream;
server_tokens on; //打开版本号 on
[root@www conf]#systemctl restart nginx
[root@localhost core]# curl -i http://192.168.10.101
HTTP/1.1 200 OK
Server: IIS1.1.1
二.配置网页缓存时间
当Nginx将网页数据返回给客户端后,可设置缓存时间,以便在日后进行相同内容的请求时直接返回,以避免重复请求,加快访问速度。缓存时间一般针对静态资源进行设置,对动态网页不用设置缓存时间。
修改Nginx的配置文件,在新location段加入expires参数,指定缓存时间,1d为一天
[root@www conf]# vi nginx.conf
location / {
root html;
index index.html index.htm;
}
location ~\.(gif|jpg|jepg|png|bmp|ico)$ { //加入新的 location
root html;
expires 1d; //指定缓存时间
}
三.日志切割
随着Nginx运行时间的增加,产生的日志也会逐渐增加,为了方便掌握Nginx的运行状态,需要时刻关注Nginx日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。
Nginx没有类似Apache的cronlog日志分割处理功能,但是可以通过Nginx的信号控制功能脚本来实现日志的自动切割,并将脚本加入到Linux的计划任务中,让脚本在每天的固定时间执行,便可实现日志切割功能。
(1)编写脚本/opt/fenge.sh,把Nginx的日志文件/usr/local/nginx/logs/access.log移动到目录/varog/nginx下面,以当前时间做为日志文件的名称,然后用kil-USR1创建新的日志文件/usr/local/nginx/logs/access.log, 最后删除30天之前的日志文件。
[root@www ~]# vim /opt/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)
find $logs_path -mtime +30 |xargs rm -rf
[root@www ~]# chmod +x /opt/fenge.sh //添加执行权
[root@www ~]# /opt/fenge.sh
备注:
-
kill -USR1 $(cat $pid_path) ##重建新日志文件
-
find $logs_path -mtime +30 |xargs rm -rf ##删除 30 天之前的日志文件
-
xargs:可以读取标准输入和管道中的数据,用于弥补有些命令(如echo、kill、rm)不能从管道中读取数据的不足。
-
kill -USR1 :停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。
(2)设置 crontab 任务,定期执行脚本自动进行日志分割
[root@www ~]# crontab -e
30 1 * * * /opt/fenge.sh
四.设置连接超时
为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件nginx.conf,设置keepalive_timeout超时时间。
keepalive_timeou设置连接超时
[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
http {
#keepalive_timeout 0;
keepalive_timeout 65 180;
client_header_timeout 80;
client_body_timeout 80;
}
备注:keepalive_timeo
第一个参数指定了与客户端的 keep-alive 连接超时时间,服务器将会在这个时间后关闭连接。第二个参数(可选)指定了在响应头 Keep-Alive: timeout=time 中的 time 值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。
Client_header_timeout参数可用于指定等待客户端发送请求头的超时时间,Client_body_timeout 参数可用于指定请求体读超时时间
五.更改进程数
1.ps aux查看进程
在高并发环境中,需要启动更多的Nginx进程以保证快速响应,用以处理用户的请求,避免造成阻塞。使用ps aux命令查看Nginx运行进程的个数。从命令执行结果可以看出master process是Nginx的主进程,开启了1个:worker process是子进程,子进程也是开启了1个。
[root@www con#] ps aux | grep nginx
root 12410.00.020220 616 SS 17:06 0:00nginx:nast /usr/local/sbin/nginx
nginx 1242 0.0 0.020664 1540 ? S 17:06 0:00nginx:worker proces
root 17355 0.0 0.0 112824 976 pts/3 R+ 20:39 0:00 grep --color=auto nginx
2.修改Nginx配置文件的worker_processes参数
(1)查看主机cpu数量
[root@www ~]# cat /proc/cpuinfo | grep -c "physical"
(2)修改 Nginx 的配置文件的 worker_processes 参数
[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
user nginx;
worker_processes 4;
[root@www ~]# systemctl restart nginx
[root@www ~]# ps aux | grep nginx
root 17374 0.0 0.0 20548 644 ? Ss 20:47 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 17376 0.0 0.0 20912 1344 ? S 20:47 0:00 nginx: worker process
nginx 17377 0.0 0.0 20912 1344 ? S 20:47 0:00 nginx: worker process
nginx 17376 0.0 0.0 20912 1344 ? S 20:47 0:00 nginx: worker process
nginx 17377 0.0 0.0 20912 1344 ? S 20:47 0:00 nginx: worker process
root 17400 0.0 0.0 112824 980 pts/3 S+ 20:47 0:00 grep --color=auto nginx
(2)以设置每个进程分别由不同的 CPU 核心处理,达到 CPU 的性能最大化
[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
user nginx;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
六.配置网页压缩
1.修改 Nginx 的配置文件,加入压缩功能参数
[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
http {
#去掉gzip on;前面的注释,增加其他的参数
gzip on;
gzip_buffers 4 64k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_min_length 1k;
gzip_vary on;
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpeg image/gif image/png;
}
[root@www ~]# systemctl restart nginx
- gzip on:开启 gzip 压缩输出;
- gzip_buffers 4 16k:表示申请 4 个单位为 16k 的内存作为压缩结果流缓存,默认值 是申请与原始数据大小相同的内存空间来存储 gzip 压缩结果;
- gzip_http_version 1.0:用于设置识别 http 协议版本,默认是 1.1,目前大部分浏览 器已经支持 gzip 解压,但处理较慢,也比较消耗服务器 CPU 资源;
- gzip_comp_level 2:用来指定 gzip 压缩比,1 压缩比最小,处理速度最快;9 压缩 比最大,传输速度快,但处理速度最慢,使用默认即可;
- gzip_min_length1k:用于设置允许压缩的页面最小字节数;
- gzip_vary on:选项可以让前端的缓存服务器缓存经过 gzip 压缩的页面。
- gzip_types text/plain:压缩类型,是对哪些网页文档启用压缩功能;
2.使用浏览器访问网址验证,http://192.168.10.101/
备注:
如果看不到压缩,将nginx配置文件中页面缓存的参数去掉,清空一下浏览器,再测试
七.配置防盗链
和前面配置Apache基本相同,不同的就是规则配置格式
[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
location ~* \.(gif|jpg|jpeg)$ {
valid_referers *.henan.com henan.com;
if ($invalid_referer) {
rewrite ^/ http://www.henan.com/error.png;
}
}
八.FPM
Nginx的PHP解析功能实现方法如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数调整。
(1)安装带 FPM 模块的 PHP 环境,保证 PHP 可以正常运行
(2)FPM 进程的两种启动方式
Static 的方式可以使用 pm.max_children 指定启动的进程数量
Dynamic 方式的参数要根据服务器的内存与服务负载进行调整
(3)优化
现有云服务器,运行了个人论坛,内存为 1.5G,fpm 进程数为 20,内存消耗近1G,处理比较慢,对参数进行优化处理。
root@www etc]# cd /usr/local/php5/etc/
[root@www etc]# vi php-fpm.conf
pm=dynamic
pm.max_children=20
pm.start_servers=5
pm.min_spare_servers=2
pm.max_spare_servers=8
注释:
FPM 启动时有 5 个进程,最小空闲 2 个进程,最大空闲 8 个进程,最多可以有 20 个进程存在
标签:www,nginx,优化,Nginx,conf,gzip,root,防盗链 From: https://blog.csdn.net/henanxiaoman/article/details/139769402