Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!

呕心沥血书写,看完后对Nginx了如执掌,不看真的后悔!!

  • shell脚本日志分割
  • 设置连接超时
  • Nginx深入优化
      • 更改进程数
      • 配置网页压缩
      • 配置防盗链
          • 20.0.0.25 主机:开始盗链
          • 20.0.0.26主机:配置防盗链
  • FPM 参数优化

shell脚本日志分割

●随着Nginx运行时间的增加,产生的日志也会逐渐增加,为了方便掌握 Nginx的运行
状态,需要时刻关注Nginx日志文件。太大的日志文件对监控是一个大灾难,不便于分析
排查,需要定期的进行日志文件的切割。

●编写脚本/opt/fenge.sh##
把Nginx的日志文件/usr/local/nginx/logs/access.log移动到,目录/var/log/nginx下面,
以当前时间做为日志文件的名称,然后用kill -USR1创建新的日志文件/usr/local/nginx/logs/access.log,
最后删除30天之前的日志文件。

[root@www logs]# vi /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}/51xit.top-access.log-$d
kill -USR1 $(cat $pid_path)
find $logs_path -mtime +30 | xargs rm -rf

命令解析
####创建日志文件目录
[ -d $logs_path ] || mkdir -p $logs_path

###移动并重命名日志文件
mv /usr/local/nginx/logs/access.log l o g s p a t h / 51 x i t . t o p − a c c e s s . l o g − {logs_path}/51xit.top-access.log- logspath/51xit.topaccess.logd

###重建新日志文件
kill -USR1 $(cat $pid_path)

####翩除30天之前的日志文件
find $logs_path -mtime +30 | xargs rm -rf

执行/opt/fenge.sh,测试日志文件是否被切割

[root@localhost ~]# chmod +x fengge.sh     
[root@localhost ~]# ./fengge.sh 
[root@localhost ~]# ls /var/log/nginx/
51xit.top-access.log-20200908

这里可以看到按日期分割了日志文件


[root@localhost ~]# cat /usr/local/nginx/logs/access.log

原来的日志文件没有了 重新创建了

设置连接超时

●在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连
接超时参数,实现控制连接访问时间。可以修改配置文件nginx.conf,设置keepalive_timeout
超时时间。

●keepalive_timeout第一个参数指定了与client的keep-alive连接超时时间,服务器将
会在这个时间后关闭连接。可选的第二个参数指定了在响应头Keep-Alive: timeout=time中
的time值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必要去关闭连接了。
没有这个参数,nginx不会发送Keep-Alive响应头。

●访问网址抓取数据报文,响应头中显示了超时时间是180秒。一般只设置Keepalive_timeout参数即可。
同时在优化后可能还会增加其它超时参数,比如Client_header_timeout参数,指定等
待客户端发送请求头的超时时间,Client_body_timeout指定请求体读超时时间


[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
http {
     
........//省略内容
keepalive_timeout 65 180;                    ####修改
client_header_timeout 80;                    ##在下面添加
client_body_timeout 80;                      ##在下面添加
........//省略内容


[root@localhost ~]# systemctl restart nginx

清除浏览器缓存访问验证: 20.0.0.26
keep-Alive: timeout=180\r\n
成功了
Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!_第1张图片

Nginx深入优化

更改进程数

在高并发环境中,需要启动更多的Nginx进程以保证快速响应,用以处理用户的请求,
避免造成阻塞

首先查看以下Nginx运行进程的个数

[root@localhost ~]# ps aux | grep nginx
root      11926  0.0  0.0  20556   628 ?        Ss   07:47   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     11927  0.0  0.0  21008  1596 ?        S    07:47   0:00 nginx: worker process
root      11932  0.0  0.0 112724   988 pts/0    S+   07:51   0:00 grep --color=auto nginx

这里我们看到其中master process 是Nginx的主进程,开启了1个,worker process是子进程,子
进程也是开启了1个。

●修改Nginx的配置文件的worker_processes参数,一般设为CPU 的个数或者核数
在高并发的情况下可设置为CPU个数或者核数,可以查看CPU的核数以确定参数

[root@localhost ~]# cat /proc/cpuinfo | grep -c "physical"
8

参数设置为8,和CPU的核数相同。运行进程数多一些,响应客户端访问请求时,Nginx
就不会临时启动新的进程提供服务,减少了系统的开销,提升了服务速度

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf

worker_processes  8;

修改完后,重启服务,使用 ps aux 查看运行进程数的变化情况。

[root@localhost ~]# systemctl restart nginx                   
[root@localhost ~]# ps aux | grep nginx

root      11948  0.0  0.0  20556   692 ?        Ss   07:55   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     11949  0.0  0.0  21008  1344 ?        S    07:55   0:00 nginx: worker process
nginx     11950  0.0  0.0  21008  1344 ?        S    07:55   0:00 nginx: worker process
nginx     11951  0.0  0.0  21008  1344 ?        S    07:55   0:00 nginx: worker process
nginx     11952  0.0  0.0  21008  1344 ?        S    07:55   0:00 nginx: worker process
nginx     11953  0.0  0.0  21008  1344 ?        S    07:55   0:00 nginx: worker process
nginx     11954  0.0  0.0  21008  1344 ?        S    07:55   0:00 nginx: worker process
nginx     11955  0.0  0.0  21008  1344 ?        S    07:55   0:00 nginx: worker process
nginx     11956  0.0  0.0  21008  1344 ?        S    07:55   0:00 nginx: worker process
root      11958  0.0  0.0 112724   988 pts/0    S+   07:56   0:00 grep --color=auto nginx

●开启了1个主进程和8个子进程,参数设置起到了作用。
默认情况下,Nginx的多个进程可能更多的跑在一颗CPU上,可以分配不同的进程给
不同的CPU处理,充分利用硬件多核多CPU。在一台8核CPU服务器上,可以设置每个
进程分别由不同的 CPU 核心处理,达到CPU 的性能最大化。

配置网页压缩

●Nginx的ngx_http_gzip_module压缩模块提供了对文件内容压缩的功能,允许Nginx
服务器将输出内容发送到客户端之前进行压缩,以节约网站的带宽,提升用户的访问体验,
默认 Nginx 已经安装该模块,只需要在配置文件中加入相应的压缩功能参数对压缩性能进
行优化即可。

#             gzip on;    开启gzip压缩输出;
#             gzip_min_length 1k:用于设置允许压缩的页面最小字节数;
#             gzip_buffers 4 16k:表示申请4个单位为16k的内存作为压缩结果流缓存,默认值
是申请与原始数据大小相同的内存空间来存储gzip压缩结果;

#              Zip_http_version 1.0:用于设置识别http 协议版本,默认是1.1,目前大部分浏览
器已经支持gzip解压,但处理最慢,也比较消耗服务器CPU 资源;

#              Gzip_comp_level 2:用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩
比最大,传输速度快,但处理速度最慢,使用默认即可;

#              Gzip_types text/plain:压缩类型,是对哪些网页文档启用压缩功能;
#              Gzip_vary on:选项可以让前端的缓存服务器缓存经过gzip压缩的页面

下面开始配置

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf

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;

[root@localhost ~]# systemctl restart nginx

验证:
在Nginx工作目录建立一个超过1K大小的html文件,然后访问网址抓取数据报文
Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!_第2张图片
Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!_第3张图片
Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!_第4张图片

配置防盗链

●在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济
损失,也避免了不必要的带宽浪费。Nginx的防盗链功能也非常强大,在默认情况下,只需
要进行很简单的配置,即可实现防盗链处理。

●防盗链需要准备两台主机,有一台模拟盗链

IP地址
20.0.0.26
20.0.0.25

域名
26:www.51xit.top 源主机
25:www.52.xit.top 盗链主机

为了方便验证需要修改Windows的C:\Windows\System32\drivers\etc\hosts文件,设置域名和映射关系:

20.0.0.26 www.51xit.top Nginx
20.0.0.25 www.test.com Apache

做完以后ping一下这两个网站,通了继续

Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!_第5张图片
Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!_第6张图片

这里我用工具添加了一张图片进去
Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!_第7张图片

[root@localhost html]# systemctl restart nginx

#刷新一下Nginx程序,用浏览器访问www.51xit.top

20.0.0.25 主机:开始盗链

首先打开20.0.0.26主机的域名:www.51xit.top,把网页地址复制下来

Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!_第8张图片

#下面为主机20.0.0.25的盗图配置操作:

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# vi index.html

!DOCTYPE html>
<html>
<head>
<p><em>盗版图网站</em></p>
<img src="http://www.51xit.top/zz.jpg" / >
</body>
</html>


#这里把你复制的网址填进去

接下来我们正常访问www.52xit.top 可以看到图片正常打开,盗图成功

20.0.0.26主机:配置防盗链

●Nginx的防盗链原理是加入location项,用正则表达式过滤图片类型文件,对于信任的
网址可以正常使用,不信任的网址返回相应的错误图片。在源主机(bt.com)的配置文件中
加入以下代码:

[root@localhost html]# vi /usr/local/nginx/conf/nginx.conf

#########在第一个     location / { } 下面插入    ###############
        location ~ \.(gif|jpg|jepg|png|bmp|ico)$ {
     
            root   html;
            expires 1d;
            valid_referers none blocked *.51xit.top 51xit.top;
            if ($invalid_referer) {
     
               rewrite ^/ https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2135575968,1508481517&fm=15&gp=0.jpg;
            }
        }

#这里用if判断,用rewrite跳转,后面的地址是我从百度搜来的图片
#哈哈,等我盗了别人的图片,给了第三个人用

[root@localhost html]# systemctl restart nginx    重启


~* .(jpglgif|swf)$ : 这段正则表达式表示匹配不区分大小写,以.jpg或.gif或.swf结尾的图片格式

接下来我们清除浏览器缓存重新打开www.52.xit.top,图片实现跳转了!!

Nginx高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!_第9张图片

FPM 参数优化

ginx的PHP解析功能实现如果是交由FPM处理的,为了提高 PHP的处理速度,可
对FPM模块进行参数的调整。
下面是执行步骤:

1)安装带 FPM 模块的 PHP环境,保证 PHP可以正常运行。
2) FPM进程有两种启动方式,由pm 参数指定,分别是 static和dynamic,前者将产
生固定数据的fpm进程,后者将以动态的方式产生fpm进程。

Static的方式可以使用pm.max_children 指定启动的进程数量。Dynamic方式的参数要
根据服务器的内存与服务负载进行调整,

            选项                                                     描述
Pm.max children                                       指定启动的进程数量最大的数量
Pm.start.servers                                      动态方式下初始的ftpm进程数量
Pm.min_spare_servers                                  动态方式下最小的fpm空闲进程数
Pm_max_spare_servers                                  动态方式下最大的空闲进程数

假设:现有云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近
1G,处理比较慢,对参数进行优化处理。

[root@localhost html]# cd /usr/local/php/etc/php-fpm.d
[root@localhost html]# vi www.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个
进程存在

你可能感兴趣的:(云计算,nginx)