nginx的优化和防盗链
配置Nginx隐藏版本号
1、隐藏Nginx版本号,避免安全漏洞泄漏
2、Nginx隐藏版本号的方法
·修改配置文件法
·修改源码法
隐藏版本号项目
隐藏版本号(第一种方法)
[root@server1 ~]# vi /etc/nginx.conf
[root@server1 ~]# curl -I http://localhost
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 30 Nov 2020 16:31:39 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 612
Last-Modified: Mon, 30 Nov 2020 06:09:10 GMT
Connection: keep-alive
ETag: "5fc48c86-264"
Accept-Ranges: bytes
[root@server1 ~]#
隐藏版本号(第二种方法)
[root@server1 ~]# vi /etc/nginx.conf
[root@server1 ~]# vi nginx-1.12.2/src/core/nginx.h
[root@server1 ~]# systemctl stop nginx //停止服务
[root@server1 ~]# cd nginx-1.12.2/
[root@server1 nginx-1.12.2]# make && make install //编译安装
[root@server1 nginx-1.12.2]# systemctl start nginx //开启nginx
[root@server1 nginx-1.12.2]# curl -I http://localhost
HTTP/1.1 200 OK
Server: IIS/1.1.1
Date: Mon, 30 Nov 2020 16:42:25 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 612
Last-Modified: Mon, 30 Nov 2020 06:09:10 GMT
Connection: keep-alive
ETag: "5fc48c86-264"
Accept-Ranges: bytes
[root@server1 nginx-1.12.2]#
配置Nginx网页缓存时间
·当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度
·一般针对静态网页设置,对动态网页不设置缓存时间
网页缓存时间项目
局部的设置
[root@server1 ~]# vi /etc/nginx.conf
location ~ \.(gif|jpg|jepg|png|bmp|ico)$ {
root htm;
expires 1d;
}
[root@server1 ~]# cd /usr/local/nginx/html/
[root@server1 html]# ls -lh
[root@server1 html]# vi index.html
测试
[root@server1 html]# systemctl start nginx 开启nginx服务
[root@server1 html]# netstat -anpt | grep nginx 检索nginx服务
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 32777/nginx: master
tcp 0 0 192.168.188.10:80 192.168.188.1:1814 ESTABLISHED 32780/nginx: worker
[root@server1 html]#
全局的设置
·设置方法:
修改配置文件,在http段、 或者server段、 或者location段加入对特定内容的过期参数
[root@server1 ~]# vi /etc/nginx.conf
测试抓包
日志分割
1、随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件
2、太大的日志文件对监控是一个大灾难
·定期进行日志文件的切割
3、Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割
4、通过Linux的计划任务周期性地进行日志切割
编写脚本进行日志切割的思路
·设置时间变量
·设置保存日志路径
·将目前的日志文件进行重命名
·重建新日志文件
·删除时间过长的日志文件
·设置cron任务,定期执行脚本自动进行日志分割
时间变量
[root@server1 ~]# date 获取日期
2020年 12月 01日 星期二 01:17:25 CST
[root@server1 ~]# date "+%Y%m%d" 今天的日期
20201201
[root@server1 ~]# date -d "-1 day" "+%Y%m%d" //昨天的日期
20201130
[root@server1 ~]# date -d "+1 day" "+%Y%m%d" //明天的日期
20201202
[root@server1 ~]#
查看进程号
[root@server1 ~]#cd /usr/local/nginx/logs/
[root@server1 logs]#ls -lh
总用量 108K
-rw-r--r-- 1 root root 0 11月 30 15:00 aa.access.log
-rw-r--r-- 1 root root 20K 11月 30 22:59 aa.com.access.log
-rw-r--r-- 1 root root 540 11月 30 17:31 ab.com.access.log
-rw-r--r-- 1 root root 12K 12月 1 01:12 access.log
-rw-r--r-- 1 root root 66K 12月 1 01:12 error.log
-rw-r--r-- 1 root root 6 12月 1 01:12 nginx.pid
[root@server1 logs]#cat nginx.pid //进程号
33197
日志分割脚本
[root@server1 logs]#vi fenge.sh[root@server1 logs]#vi fenge.sh
#!/bin/bash
# 日志分割
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}/aa.com.access.log-$d
kill -HUP $(cat $pid_path)
find $logs_path -mtime +60 | xargs rm -rf
[root@server1 logs]#chmod +x fenge.sh
[root@server1 logs]#./fenge.sh
[root@server1 logs]#ls -lh
总用量 100K
-rw-r--r-- 1 root root 0 11月 30 15:00 aa.access.log
-rw-r--r-- 1 root root 20K 11月 30 22:59 aa.com.access.log
-rw-r--r-- 1 root root 540 11月 30 17:31 ab.com.access.log
-rw-r--r-- 1 root root 0 12月 1 08:48 access.log
-rw-r--r-- 1 root root 68K 12月 1 08:48 error.log
-rwxr-xr-x 1 root root 311 12月 1 08:47 fenge.sh
-rw-r--r-- 1 root root 6 12月 1 01:12 nginx.pid
[root@server1 logs]#
[root@server1 ~]#cd /var/log/nginx/
[root@server1 nginx]#ls -lh
总用量 12K
-rw-r--r-- 1 root root 12K 12月 1 01:12 aa.com.access.log-2020-11-30
[root@server1 nginx]#
查看sh的绝对路径
[root@server1 nginx]#which sh
/usr/bin/sh
编写任务计划
[root@server1 nginx]#crontab -e
0 1 * * * /usr/bin/sh /root/fenge.sh
查看任务计划
[root@server1 nginx]#crontab -l
0 1 * * * /usr/bin/sh /root/fenge.sh
注:
* * * * *
分钟 小时 日期 月份 星期
kill -QUIT 结束进程 -HUP 平滑重启类似reload -USR1 日志分隔 -USR2 平滑升级
nginx实现连接超时
1、为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
2、超时参数
超时的参数
Keepalive_ timeout 设置连接保持超时时间
Client header timeout 指定等待客户端发送请求头的超时时间
Client body_ _timeout 设置请求体读超时时间
连接超时项目
[root@server1 nginx]#vi /etc/nginx.conf
keepalive_timeout 65 180; 前面参数是服务器主动关闭的超时时间(默认是65秒),后面参数是客户机浏览器主动关闭的时间
client_header_timeout 80; 等待客户端发送请求头的超时时间超时会发送408错误
client_body_timeout 80; 设置客户端发送请求体超时时间
[root@server1 nginx]#nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server1 nginx]#systemctl stop nginx
[root@server1 nginx]#systemctl start nginx
抓包结果
更改Nginx运行进程数
1、在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
2、更改进程数的配置方法:
·修改配置文件,修改进程配置参数
3、修改配置文件的worker_ processes参数
·一般设为CPU的个数或者核数
·在高并发情况下可设置为CPU个数或者核数的2倍
4、增加进程数,可减少了系统的开销,提升了服务速度
5、使用ps aux查看运行进程数的变化情况
6、默认情况,Nginx的多 个进程可能跑在一-个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU
7、在一台4核物理服务器,进行配置,将进程进行分配
更改进程数项目
[root@server1 ~]#cat /proc/cpuinfo | grep -c "physical"
4
[root@server1 ~]#vi /etc/nginx.conf
[root@server1 ~]#ulimit -n 65535 >> /etc/rc.local
[root@server1 ~]#nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server1 ~]#systemctl stop nginx
[root@server1 ~]#systemctl start nginx
[root@server1 ~]#ps aux | grep nginx
root 38085 0.0 0.0 20500 700 ? Ss 09:48 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 38086 0.0 0.1 24260 2740 ? S 09:48 0:00 nginx: worker process
nginx 38087 0.0 0.1 24260 2740 ? S 09:48 0:00 nginx: worker process
nginx 38088 0.0 0.1 24260 2740 ? S 09:48 0:00 nginx: worker process
nginx 38089 0.0 0.1 24260 2740 ? S 09:48 0:00 nginx: worker process
nginx 38090 0.0 0.1 24260 2740 ? S 09:48 0:00 nginx: worker process
nginx 38091 0.0 0.1 24260 2740 ? S 09:48 0:00 nginx: worker process
nginx 38092 0.0 0.1 24260 2740 ? S 09:48 0:00 nginx: worker process
nginx 38093 0.0 0.1 24260 2740 ? S 09:48 0:00 nginx: worker process
root 38103 0.0 0.0 112676 984 pts/2 S+ 09:49 0:00 grep --color=auto nginx
[root@server1 ~]#
实现网页的压缩的功能
1、Nginx的ngx_ http gzip_ module压缩模块提供对文件内容压缩的功能
2、允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
3、可在配置文件中加入相应的压缩功能参数对压缩性能进行优化
4、压缩功能参数
·gzip on:开启gzip压缩输出
·gzip_ min_ length 1k:设置允许压缩的页面最小字节数
·gzip_ buffers 4 16k:申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
·gzip_ http_ version 1.0:设置识别http协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,但处理较慢,也比较消耗服务器CPU资源
5、压缩功能参数(续)
·gzip_comp_ level 2:指定gzip压缩比,1压缩比最小,处理速度最快; 9压缩比最大,传输速度快,但处理速度最慢
·gzip_types text/plain: 压缩类型,对哪些网页文档启用压缩功能
·gzip_vary on:让前端缓存服务器缓存经过gzip压缩的页面
6、将以上的压缩功能参数加入到主配置文件httpd配置中段
7、重启服务, 查看网页压缩功能开启结果
网页压缩的项目
[root@server1 ~]#vi /etc/nginx.conf
gzip on; 开启gzip压缩功能
gzip_min_length 1k; 压缩阀值
gzip_buffers 4 16k; buffer大小为4个16k缓存区大小
gzip_http_version 1.1; 压缩版本
gzip_comp_level 6; 压缩比率,最小为1,处理速度快,传输速度慢,9最大压缩比,处理速度慢,传输速度快
gzip_types text/plain text/css text/javascript application/x-javascript application/javascript application/json application/x-httpd-php application/xml image/jpg image/jpeg image/gif image/png;
gzip_disable “MSIE [1-6].”; 配置禁用gzip条件,支持正则,表示ie6以下不启用gzip
gzip_vary on; 选择支持very header可以让前端的缓存服务器缓存经过gzip压缩的页面
[root@server1 ~]#nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server1 ~]#systemctl stop nginx
[root@server1 ~]#systemctl start ngin
抓包的结果
实现防盗链
1、在企业网站服务中,- -般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失
2、Nginx防盗链功能也非常强大。默认情况下,只需要进行简单的配置,即可实现防盗链处理
防盗链项目
[root@server1 ~]#vi /etc/nginx.conf
location ~* \.(jpg|gif|swf)$ {
valid_referers none blocked *.aa.com aa.com 192.168.188.10;
if ($invalid_referer) {
rewrite ^/ http://www.aa.com/error.png;
}
}
[root@server1 html]# vi index.html
<html>
<head>
<titly>--压缩测试页--</titly>
<body><h1>This is Otter's father</h1></body>
<img src=otter.png / >
</head>
</html>
[root@server1 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server1 ~]# systemctl stop nginx
[root@server1 ~]# systemctl start nginx
测试
软件抓包发现图片重定向是主机地址,效果正确
再开个主机192.168.188.20
[root@server1 ~]# setenforce 0
[root@server1 html]# yum -y install httpd
[root@server1 html]# vi /var/www/html/index.html
i<html>
<head>
<titly>--压缩测试页--</titly>
<body><h1>song</h1></body>
<img src="http://192.168.188.10/otter.png" / >
</head>
</html>
[root@server1 ~]# systemctl start httpd
[root@server1 ~]# vi /etc/hosts
192.168.188.10 www.aa.com
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# ls -lh
总用量 412K
-rw-r--r-- 1 root root 312K 12月 1 12:02 baocuo.jpg
-rw-r--r-- 1 root root 117 12月 1 11:57 index.html
-rw-r--r-- 1 root root 96K 12月 1 12:02 otter.png
对FPM模块进行参数优化
1、Nginx的PHP解析功能实现如果是交由FPM处理的,为了 提高PHP的处理速度, 可对FPM模块进行参数的调整根据服务器的内存与服务负载,调整FPM模块参数
2、启动fpm进程方式,通过pm参数指定
·static:将产生固定数量的fpm进程
·dynamic:将以动态的方式产生fpm进程
3、FPM优化参数
·Static的方式的参数:
◆pm.max_ children: 指定启动的进程数量
·Dynamic方式的参数:
◆pm.max_ children: 指定启动进程数的最大值
◆pm.start servers: 动态方式下初始的fpm进程数
◆pm.min_ spare_ servers: 动态方式下最小的fpm空闲进程数
◆pm.max_ spare_ servers: 动态方式下最大的fpm空闲进程数
[root@server1 etc]# cd /usr/local/php/etc/php-fpm.d/
[root@server1 php-fpm.d]# ls -lh
总用量 40K
-rw-r--r-- 1 root root 19K 11月 30 22:24 www.conf
-rw-r--r-- 1 root root 19K 11月 30 20:23 www.conf.default
[root@server1 php-fpm.d]# vi www.conf
pm = dynamic
pm.max_children = 20 static模式下空闲进程数上限,大于下面的值
pm.start_servers = 5 动态方式下默认开启的进程数,在最小和最大之间
pm.min_spare_servers = 2 动态方式下最少空闲进程数
pm.max_spare_servers = 8 动态方式下最大空闲进程数
[root@server1 php-fpm.d]# ps aux | grep php-fpm
root 29885 0.0 0.2 214220 4016 ? Ss 13:23 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody 29886 0.0 0.3 216368 5976 ? S 13:23 0:00 php-fpm: pool www
nobody 29887 0.0 0.2 216368 5036 ? S 13:23 0:00 php-fpm: pool www
root 32485 0.0 0.0 112680 984 pts/1 S+ 14:29 0:00 grep --color=auto php-fpm
[root@server1 php-fpm.d]# pkill php-fpm
[root@server1 php-fpm.d]# /usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
[root@server1 php-fpm.d]# ps aux | grep php-fpm
root 32501 0.0 0.2 214236 4132 ? Ss 14:30 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody 32502 0.0 0.2 216320 3920 ? S 14:30 0:00 php-fpm: pool www
nobody 32503 0.0 0.2 216320 3920 ? S 14:30 0:00 php-fpm: pool www
nobody 32504 0.0 0.2 216320 3920 ? S 14:30 0:00 php-fpm: pool www
nobody 32505 0.0 0.2 216320 3920 ? S 14:30 0:00 php-fpm: pool www
nobody 32506 0.0 0.2 216320 3924 ? S 14:30 0:00 php-fpm: pool www
root 32508 0.0 0.0 112676 980 pts/1 S+ 14:30 0:00 grep --color=auto php-fpm
[root@server1 php-fpm.d]#