Nginx优化(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
.cn 域名,1个 12个月
简介: Nginx优化

4、日志切割

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

Nginx 没有类似 Apache 的cronlog 日志分割处理功能,但可以通过 Nginx 的信号控制功能脚本来实现日志的自动切割,并将脚本加入到Linux 的计划任务中,让脚本在每天的固定时间执行,便可实现日志切割功能。

(1)首先编写脚本/opt/fenge.sh,把Nginx 的日志文件/usr/local/nginx/ogs/

access.log 移动到目录/var/log/nginx 下面,以当前时间作为日志文件的名称:然后用kill -USR1 创建新的日志文件 /usr/local/nginx/1ogs/access.1og,最后删除 30 天之前的日志文件。


vim /fenge.sh
#!/bin/bash
d=$(date -d "-1 day" "+%Y%m%d")                 #显示前一天的时间
logs_path="/var/log/nginx"
pid_path=`cat /usr/local/nginx/logs/nginx.pid`
[ -d $logs_path ] || mkdir -p $logs_path        #创建日志文件目录
#移动并重命名日志文件
mv /usr/local/nginx/logs/access.log ${logs_path}/kgc.com-access.log-{$d}
#重建日志文件
kill -USR1 $pid_path
#删除30天前的日志文件                   
find $logs_path -mtime +30 -exec rm -rf {} \;
#find $logs_path -mtime +30 |xargs rm -rf



(2)执行fenge.sh,测试日志文件是否被分割。


chmod +x fenge.sh #加执行权限
./fenge.sh #执行分割脚本
ls /var/log/nginx #按日期分割了日志文件
ls /usr/local/nginx/logs/access.log #原来的日志文件重新构建


(3)设置每天的crontab任务,定期执行脚本


crontab -e
0 1 * * * /root/fenge.sh   #设置周期性计划


小知识


在linux操作系统中,每个文件都有很多的时间参数,其中有三个比较主要,分别是ctime,atime,mtime


ctime(status time):


当修改文件的权限或者属性的时候,就会更新这个时间,ctime并不是create time,更像是change time,只有当更新文件的属性或者权限的时候才会更新这个时间,但是更改内容的话是不会更新这个时间。


atime(accesstime):


当使用这个文件的时候就会更新这个时间。


mtime(modification time):


当修改文件的内容数据的时候,就会更新这个时间,而更改权限或者属性,mtime不会改变,这就是和ctime的区别。


5、设置连接超时

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


vim /usr/local/nginx/conf/nginx.conf
http {
...... 
    keepalive_timeout 65 180;
    client_header_timeout 80;
    client_body_timeout 80;
...... 
}
systemctl restart nginx





keepalive_timeout


指定KeepAlive的超时时间(timeout)。指定每个TCP连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接。

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

访问网址抓取数据报文,响应头中显示了超时时间是 180 秒,

一般只设置 kcepalive_ timeout 参数即可。


第二个参数(可选的)指定了在响应头Keep-Alive:timeout=time中的time值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。


client_header_timeout


客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。


client_body_timeout


指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。


二、Nginx优化深入


6、更改进程数

#修改配置文件,这里了解一下即可

vim /usr/local/nginx/conf/nginx.conf

#第3行;修改为核数相同或者2倍

worker_processes  8;

#添加;设置每个进程由不同cpu处理,进程数配2 4 6 8分别为0001 0010 0100 1000

worker_cpu_affinity 0001 0010 0100 1000;

systemctl restart nginx


在高并发的环境中需要启动更多的的Nginx进程以保证快速响应,用以处理用户的请求避免阻塞。使用ps aux命令可以查看Ngin运行进程的个数。


其中master process是Nginx的主进程,开启了1个,worker process是子进程,也是开启了一个。

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

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

重启Nginx并查看运行进程数的变化

开启了一个主进程和8个子进程,配置成功。

默认情况下Nginx的多个进程可能更多的跑在一个CPU上,可以分配不同的进程给不同的CPU 处理以充分利用硬件多核CPU。在一台4核CPU服务器上设置每个进程分别由不同的CPU核心处理,以达到CPU性能最大化。


7、网页压缩

Nginx的ngx_http_gzip_module压缩模块提供了 对文件内容压缩的功能,允许 Nginx服务器将输出内容发送到客户端之前进行压缩,以节约网站的贷款,提升用户的访问体验,默认Nginx已经安装该模块,只需要在配置文件中,加入相应的压缩功能参数对压缩对压缩性能优化即可
gzip on: 开启gzip 压缩输出,
gzip_ min _length lk:用于设置允许压缩的页面最小字节数。
gzip buffers 4 16k:表示申请4 个单位为 16KB 的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip 压缩结果。
gzip http_ version 1.1:用于设置识别 http协议版本,默认是1.1,目前大部分浏览器己经支持 gzip 解压,但处理很慢,也比较消耗服务器 CPU 资源。
gzip_comp_ level 2: 用来指定gzip 压缩比,压缩比 1最小,处理速度最快:压缩比9最大,传输速度快,但处理速度最慢,使用默认即可。
gzip_types text/plain: 压缩类型,是指对哪些网页文档启用压缩功能。
gzip_ vary on:该选项可以让前端的缓存服务器缓存经过gzip 压缩的页面。


修改Nginx的配置文件,加入压缩功能参数。


vim /usr/local/nginx/conf/nginx.conf
http {
...... 
   gzip on;             #取消注释,开启gzip压缩功能
   gzip_min_length 1k;          #最小压缩文件大小
   gzip_buffers 4 16k;          #压缩缓冲区,大小为4个16k缓冲区
   gzip_http_version 1.1;       #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
   gzip_comp_level 6;           #压缩比率
   gzip_vary on;          #支持前端缓存服务器存储压缩页面
   gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;   #压缩类型,表示哪些网页文档启用压缩功能




8、防盗链

在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免了不必要的带宽浪费。

Nginx 的防盗链功能也非常强大,在默认情况下,只需要进行很简单的配置,即可实现防盗链处理。


需要准备两台主机模拟防盗链,主机配置如下:


IP地址 域名 用途
192.168.94.151 www.bt.com 源主机
192.168.94.157 www.test.com 盗链主机

8.1网页准备配置


#盗链网站主机(192.168.10.17)网页准备
1. #再开一台centos服务器,安装httpd
yum install -y httpd
​2. #切换至/var/www/html
cd /var/www/html
vim index.htm
<html>
<body>
<h1>this is zzh.com!</h1>
<img src="http://www.kgc.com/meimv.jpg"/>
</body>
</html>
3. #在Web源主机(192.168.10.12)添加域名
vim /etc/hosts
192.168.10.12 www.kgc.com
4. #在Web源主机(192.168.10.12)添加图片
vim /usr/local/nginx/html/index.html 
<img src="meimv.jpg">
5. #在盗链网站主机(192.168.10.17)添加域名
vim /etc/hosts
192.168.10.12 www.kgc.com
192.168.10.17 www.zzh.com
7. #在盗链网站开启服务,并在网页中测试
systemctl start httpd

8.2.配置防盗链主

1.cd /usr/local/nginx/html/
#去这里添加一个错误图片,以便跳转界面使用error.png
vim /usr/local/nginx/conf/nginx.conf
2. #在Web源主机(192.168.10.12)
     location ~* \.(jpg|swf)$ {
   valid_referers none blocked *.kgc.com kgc.com;
            if ( $invalid_referer ) {
                  rewrite ^/ http://www.kgc.com/error.png;
                           }
             }
 3. #修改域名
 listen       80;
        server_name  www.kgc.com;
4. #检查语法是否有错
nginx -t
5. #重启服务
systemctl restart nginx.service
6. #在网页测试
源主机网页:  http://www.kgc.com/
盗链主机网页: http://www.zzh.com/



9、 fpm参数优化

vim /usr/local/php/etc/php-fpm.conf 
pid = run/php-fpm.pid
vim /usr/local/php/etc/php-fpm.d/www.conf
--96行--
pm = dynamic        #fpm进程启动方式,动态的
--107行--
pm.max_children=20      #fpm进程启动的最大进程数
--112行--
pm.start_servers = 5    #动态方式下启动时默认开启的进程数,在最小和最大之间
--117行--
pm.min_spare_servers = 2  #动态方式下最小空闲进程数
--122行--
pm.max_spare_servers = 8  #动态方式下最大空闲进程数
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`     #重启php-fpm
netstat -anpt | grep 9000
相关文章
|
8月前
|
应用服务中间件 nginx
nginx优化:URI过长或request header过大导致400或414报错
当出现URI过长或请求头过大导致400或414报错时,可以通过以下方式对Nginx进行优化: 1. 调整client_max_body_size参数:该参数用于限制请求体的大小。默认情况下,Nginx的client_max_body_size参数设置为1M。如果请求体超过这个大小,Nginx会返回400错误。您可以根据实际需求适当增加这个值,例如设置为10M或更大。 ``` http { client_max_body_size 10M; } ``` 2. 调整large_client_header_buffers参数:该参数用于调整请求头缓冲区的大
1551 0
|
8月前
|
应用服务中间件 Linux PHP
深入理解Nginx工作原理及优化技巧(上)
深入理解Nginx工作原理及优化技巧
深入理解Nginx工作原理及优化技巧(上)
|
9月前
|
缓存 安全 应用服务中间件
百度搜索:蓝易云【Nginx的搭建和优化详细教程。】
通过以上步骤,你已经成功搭建和优化了Nginx服务器。你可以根据自己的需求进行进一步的配置和调整,以满足你的网站的性能和安全需求。
270 3
|
20天前
|
监控 前端开发 应用服务中间件
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽(2)
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽
35 1
|
20天前
|
负载均衡 前端开发 应用服务中间件
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽(1)
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽
39 1
|
2月前
|
缓存 负载均衡 安全
深入探索Nginx高性能Web服务器配置与优化
【5月更文挑战第7天】本文深入探讨了Nginx的配置与优化,重点介绍了基础配置参数如`worker_processes`、`worker_connections`和`keepalive_timeout`,以及优化策略,包括使用epoll事件驱动模型、开启gzip压缩、启用缓存、负载均衡和安全配置。此外,还提到了性能调优工具,如ab、nginx-stats和nmon,以助于提升Nginx的性能和稳定性。
|
2月前
|
安全 应用服务中间件 Linux
高并发下Nginx优化(一)
【4月更文挑战第15天】高并发下Nginx优化
51 0
|
2月前
|
运维 Java 应用服务中间件
Nginx+Tomcat动静分离及Nginx优化(企业案例)
Nginx+Tomcat动静分离及Nginx优化(企业案例)
|
2月前
|
前端开发 应用服务中间件 nginx
使用nginx-http-concat资源请求合并功能 优化网站响应
使用nginx-http-concat资源请求合并功能 优化网站响应
25 0
|
2月前
|
JavaScript 前端开发 应用服务中间件
vue项目加载慢,Nginx页面优化
vue项目加载慢,Nginx页面优化
136 0