为了适应企业需求,就需要考虑如何提升Nginx的性能与稳定性,这就是Nginx优化的内容,本次博客主要讲述Nginx的优化以及防盗链的部署。
Nginx的详细编译安装过程可以参考博主前一篇文章。
https://blog.csdn.net/chengu04/article/details/107894677
●隐藏Nginx版本号,避免安全漏洞泄露
●Nginx隐藏版本号的方法
未隐藏版本号前使用curl -I(大写的i)命令检测结果
[root@localhost ~]# curl -I http://14.0.0.40
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Mon, 10 Aug 2020 14:13:04 GMT
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; ##关闭版本号
[root@localhost ~]# curl -I http://14.0.0.40 ##访问网站使用curl -I命令检测
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 10 Aug 2020 14:16:42 GMT
[root@localhost ~]# vim /root/nginx-1.12.2/src/core/nginx.h
#define nginx_version 1012002
#define NGINX_VERSION "1.1.1"
#define NGINX_VER "nginx/" NGINX_VERSION
[root@localhost ~]# curl -I http://14.0.0.40
HTTP/1.1 200 OK
Server: nginx/1.1.1
Date: Mon, 10 Aug 2020 14:13:04 GMT
●Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
●Nginx默认使用nobody用户账号与组账号
●修改的方法
编译安装时指定用户与组
1.创建用户账号与组账号,如nginx
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
2.编译安装--user与--group指定Nginx服务的运行用户与组账户
[root@localhost nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
●当nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度。
●一般针对静态网页设置,对动态网页不设置缓存时间
●设置方法
在主配置文件的location段加入expires参数
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
...省略内容
location ~\.(gif|jpg|jepg|pngico)$ {
root html;
expires 1d;
}
●随着Nginx运行时间增加,日志也会增加。太大的日志文件对监控是一个大灾难。所以需要定期进行日志文件的切割
●Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割(Kill -HUP cat /xxx/log/nginx.pid
#平滑重启nginx,类似reload)
-QUIT :结束进程;-USR1:日志分割;-USR2:平滑升级
●通过Linux的计划任务周期性地进行日志切割
●编写脚本进行日志切割示例
[root@localhost ~]# vim /root/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}/test.com-access.log-$d
#通过重载生成新日志(平滑的读取新配置文件,不必重启nginx)
kill -HUP $(cat $pid_path)
#删除30天前的日志(echo '--help' | xargs cat 等价于 cat --help)
find $logs_path -mtime +30 | xargs rm -rf
[root@localhost ~]# chmod +x fenge.sh
#设置crontab任务,每天1点执行自动进行日志分割的脚本
[root@localhost ~]# crontab -e
0 1 * * * /root/fenge.sh
date -d :-d选项设置时间格式;+%Y%m%d :日期显示的格式
mtime:修改数据的时候,更新这个时间
ctime:更改元信息(权限或者属性)的时候,更新这个时间
atime:访问文件的时候,更新这个时间
●为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
●Nginx使用keepalive_timeout来指定KeepAlive的超时时间(timeout)
●指定每个TCP连接最多可以保持多长时间。Nginx的默认值是65秒,有些浏览器最多只保持60秒,
若将它设置为0,就禁止了keepalive连接。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
http {
.....
keepalive_timeout 100;
client_header_timeout 80; ##等待客户端发送请求头的超时时间 超时会发送408错误
client_body_timeout 80; ##设置请求体的读超时时间
}
●在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞。
●修改配置文件的worker_processes参数
一般设为CPU的个数或者核数
在高并发情况下可设置为CPU个数或者核数的2倍
●增加进程数,可减少了系统的开销,提升了服务速度
●使用ps aux查看运行进程数的变化情况
[root@localhost ~]# cat /proc/cpuinfo | grep -c "physical id" ##查看物理CPU的个数
4
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
worker_processes 4 ##将工作进程数设为4
[root@localhost ~]# service nginx stop
[root@localhost ~]# service nginx start
1.主配置文件中找到gzip on添加如下参数
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
gzip on; ##开启gzip压缩功能
gzip_min_length 1k; ##压缩阈值(超过1k的文件进行压缩)
gzip_buffers 4 16k; ##buffer(缓冲)大小为4个16k缓冲区大小
gzip_http_version 1.1; ##压缩版本
gzip_comp_level 6;
##压缩比率,最小为1,处理速度快,传输速度慢;最大为9,处理速度慢,传输速度快
gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable "MSIE [1-6]\."; ##配置禁用gzip条件,支持正则,表示ie6以下不启用
gzip_vary on; ##选择支持vary header可以让前端的缓存服务器缓存经过gzip压缩的页面
2.在/usr/local/nginx/html目录下插入jpg图片
[root@localhost ~]# vim /usr/local/nginx/html/index.html
...省略内容
Welcome to nginx!
##加入
标签
3.使用win10客户端访问网页,并使用fiddler软件抓包验证。
1.源主机配置
源主机的域名:www.test.com
做www.test.com–》14.0.0.40的域名解析
首页站点中放入一张image.jpg图片
2.盗链网站首页配置
[root@localhost ~]# vim /var/www/html/index.html
this is copy
4.源主机防盗链配置
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf
...省略内容
location ~*\.(gif|jpg|swf)$ {
valid_referers none blocked *.test.com test.com;
if ($invalid_referer) {
rewrite ^/ http://www.test.com/error.png;
}
}