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 logspath/51xit.top−access.log−{logs_path}/51xit.top-access.log-logspath/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 参数优化!!相关推荐
- centos 7.6 —— Nginx 配置网页防盗链FPM参数优化
centos 7.6 -- Nginx 配置网页防盗链&&FPM参数优化 一.网页防盗链 (1)防盗链端--服务端配置(192.168.75.134) 1.1 服务端配置DNS服务,域 ...
- Nginx优化与防盗链(隐藏版本号、配置缓存时间、日志分割、修改进程数、配置连接超时、使用gzip压缩页面、防盗链设置,fpm优化)
文章目录 隐藏Nginx版本号 网页压缩 网页压缩配置 网页缓存时间 网页缓存时间设置 更改Nginx运行进程数 连接超时 nginx防盗链设置 盗链网站 配置httpd 日志分割 fpm参数优化 隐 ...
- Nginx学习笔记3:Shell脚本检测Nginx服务状态
前言 nginx 服务启动后,我们需要对其服务状态进行监控,今天学习过程中了解到一段非常有用的小脚本,不仅可以监控Nginx,也可以用来监控其他服务 脚本 A=`ps -C nginx –no-hea ...
- 使用shell脚本对Linux系统和进程资源进行监控
今天发现一个网站,快课网,感觉还不错,里面有编程,面试,算法等等相关内容. 链接如下:http://www.cricode.com/ 首页便看到这篇文章,正好对Linux和shell等持续关注,转载学 ...
- crontab执行shell脚本日志中出现乱码
使用nutch开源的搜索引擎抓取网页信息,通过计划任务crontab执行shell脚本,并将启动信息记录进日志文件,但是每次都会出现乱码,如图所示 经过反复测试,排除了java程序问题,文件权限问题, ...
- Linux学习总结(76)—— Shell 脚本日志技巧
常见日志打印方式 编写 shell 脚本时,最简单的日志打印是使用 echo 输出,比如: 下面是打印一个测试程序的日志 [root@VM-0-2-centos ~]# echo "this ...
- 使用 shell 脚本对 Linux 系统和进程资源进行监控
Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是 ...
- Linux Shell 脚本限制ssh最大用户登录数
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1670233 我撰 ...
- Linux Shell脚本实现根据进程名杀死进程
怀念windows下的任务管理器啊,有啥看的顺眼的程序鼠标点几下就能将其干掉. 今天在用Firefox浏览器浏览网页时,界面瞬间卡住了,什么都不能点,测试了下,只有切换到命令行界面(Ctrl+Alt+ ...
最新文章
- 从无到有,支付路由系统升级打怪之路|原创
- 优秀学生是如何高效利用时间的?
- 工作中发现的相对布局中的一个小技巧
- Redis 管道(Pipelining)
- log4j:WARN No appenders could be found for logger
- Windows 8 Directx 开发学习笔记(八)要有光
- C#与Matlab混合编程中遇到的“MathWorks.MATLAB.NET.Arrays.MWNumericArray”的类型初始值设定项引发异常。
- show processlist中kill锁表语句与慢sql
- Pandas+Pyecharts | 医院药品销售数据可视化
- 使用PG处理地图数据偏移问题
- 微型计算机控制技术应用,微型计算机控制技术(第3版)
- Android-Handler机制简述
- 音视频聊天开发: 1 视频采集
- win8.1电脑显示器亮度按钮无法使用
- 短视频直播系统的功能
- xssgame第九关至第十关
- 2021/9/12正睿10测Day.3
- 1月第3周易盾业务风控关注 | 2020年全国受理网络违法和不良信息举报1.63亿件
- 笔记本计算机半角数字切换,半角字符怎么输入?如何切换为-全角字符
- 为什么安卓手机退出大型游戏时没有过渡动画?
热门文章
- ★大塚 愛【LOVE IS BORN】~3rd Anniversary 2006~のライブDVD★
- MATLAB 画点图即连线
- 从10年软测人的角度,一文读懂“拼多多优惠券测试”套路
- 现代笑话二则:1.宿舍找钱;2.不漂亮的漂亮。
- 工业防腐漆的作用,你知道的有几个
- 操作系统课设之单线程版
- Acwing 第四章模板及详解(数学知识)
- 全球及中国雾化铜基粉末行业运营状况与发展动态分析报告2022-2028年
- Java设计模式 Design Pattern:包装模式 Decorator Pattern
- 设计模式初探-观察者模式(OBSERVER)又称发布-订阅(Publish-Subscribe)依赖(Dependents)