呕心沥血书写,看完后对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 logspath/51xit.top−access.log−{logs_path}/51xit.top-access.log-logsp​ath/51xit.top−access.log−d

###重建新日志文件
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深入优化

更改进程数

在高并发环境中,需要启动更多的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.confworker_processes  8;

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

[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# ps aux | grep nginxroot      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.confgzip 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的防盗链功能也非常强大,在默认情况下,只需
要进行很简单的配置,即可实现防盗链处理。

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

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一下这两个网站,通了继续


这里我用工具添加了一张图片进去

[root@localhost html]# systemctl restart nginx#刷新一下Nginx程序,用浏览器访问www.51xit.top

20.0.0.25 主机:开始盗链

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

#下面为主机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,图片实现跳转了!!

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.confpm=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高级优化(2): shell脚本日志切割,连接超时,进程数,网页压缩,防盗链,FPM 参数优化!!相关推荐

  1. centos 7.6 —— Nginx 配置网页防盗链FPM参数优化

    centos 7.6 -- Nginx 配置网页防盗链&&FPM参数优化 一.网页防盗链 (1)防盗链端--服务端配置(192.168.75.134) 1.1 服务端配置DNS服务,域 ...

  2. Nginx优化与防盗链(隐藏版本号、配置缓存时间、日志分割、修改进程数、配置连接超时、使用gzip压缩页面、防盗链设置,fpm优化)

    文章目录 隐藏Nginx版本号 网页压缩 网页压缩配置 网页缓存时间 网页缓存时间设置 更改Nginx运行进程数 连接超时 nginx防盗链设置 盗链网站 配置httpd 日志分割 fpm参数优化 隐 ...

  3. Nginx学习笔记3:Shell脚本检测Nginx服务状态

    前言 nginx 服务启动后,我们需要对其服务状态进行监控,今天学习过程中了解到一段非常有用的小脚本,不仅可以监控Nginx,也可以用来监控其他服务 脚本 A=`ps -C nginx –no-hea ...

  4. 使用shell脚本对Linux系统和进程资源进行监控

    今天发现一个网站,快课网,感觉还不错,里面有编程,面试,算法等等相关内容. 链接如下:http://www.cricode.com/ 首页便看到这篇文章,正好对Linux和shell等持续关注,转载学 ...

  5. crontab执行shell脚本日志中出现乱码

    使用nutch开源的搜索引擎抓取网页信息,通过计划任务crontab执行shell脚本,并将启动信息记录进日志文件,但是每次都会出现乱码,如图所示 经过反复测试,排除了java程序问题,文件权限问题, ...

  6. Linux学习总结(76)—— Shell 脚本日志技巧

    常见日志打印方式 编写 shell 脚本时,最简单的日志打印是使用 echo 输出,比如: 下面是打印一个测试程序的日志 [root@VM-0-2-centos ~]# echo "this ...

  7. 使用 shell 脚本对 Linux 系统和进程资源进行监控

    Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是 ...

  8. Linux Shell 脚本限制ssh最大用户登录数

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1670233 我撰 ...

  9. Linux Shell脚本实现根据进程名杀死进程

    怀念windows下的任务管理器啊,有啥看的顺眼的程序鼠标点几下就能将其干掉. 今天在用Firefox浏览器浏览网页时,界面瞬间卡住了,什么都不能点,测试了下,只有切换到命令行界面(Ctrl+Alt+ ...

最新文章

  1. 从无到有,支付路由系统升级打怪之路|原创
  2. 优秀学生是如何高效利用时间的?
  3. 工作中发现的相对布局中的一个小技巧
  4. Redis 管道(Pipelining)
  5. log4j:WARN No appenders could be found for logger
  6. Windows 8 Directx 开发学习笔记(八)要有光
  7. C#与Matlab混合编程中遇到的“MathWorks.MATLAB.NET.Arrays.MWNumericArray”的类型初始值设定项引发异常。
  8. show processlist中kill锁表语句与慢sql
  9. Pandas+Pyecharts | 医院药品销售数据可视化
  10. 使用PG处理地图数据偏移问题
  11. 微型计算机控制技术应用,微型计算机控制技术(第3版)
  12. Android-Handler机制简述
  13. 音视频聊天开发: 1 视频采集
  14. win8.1电脑显示器亮度按钮无法使用
  15. 短视频直播系统的功能
  16. xssgame第九关至第十关
  17. 2021/9/12正睿10测Day.3
  18. 1月第3周易盾业务风控关注 | 2020年全国受理网络违法和不良信息举报1.63亿件
  19. 笔记本计算机半角数字切换,半角字符怎么输入?如何切换为-全角字符
  20. 为什么安卓手机退出大型游戏时没有过渡动画?

热门文章

  1. ★大塚 愛【LOVE IS BORN】~3rd Anniversary 2006~のライブDVD★
  2. MATLAB 画点图即连线
  3. 从10年软测人的角度,一文读懂“拼多多优惠券测试”套路
  4. 现代笑话二则:1.宿舍找钱;2.不漂亮的漂亮。
  5. 工业防腐漆的作用,你知道的有几个
  6. 操作系统课设之单线程版
  7. Acwing 第四章模板及详解(数学知识)
  8. 全球及中国雾化铜基粉末行业运营状况与发展动态分析报告2022-2028年
  9. Java设计模式 Design Pattern:包装模式 Decorator Pattern
  10. 设计模式初探-观察者模式(OBSERVER)又称发布-订阅(Publish-Subscribe)依赖(Dependents)