目录
一、Nginx服务优化
1.1 配置Nginx隐藏版本号
1.1.1 Nginx隐藏版本号的方法
修改配置文件法 方法一
修改配置文件法 方法二
修改源码法
二、修改Nginx用户与组
2.1 修改的方法(两种)
配置Nginx 网页缓存时间
三、实现Nginx的日志分割
编写脚本进行日志切割
四、 配置Nginx实现连接超时
五、更改Nginx运行进程数
六、配置Nginx实现网页优化压缩功能
压缩功能参数
七、配置防盗链
隐藏Nginx版本号,避免安全漏洞泄漏
查看Nginx版本号
将Nginx配置文件中server_ tokens 选项的值设置为off
[root@www conf]# vi nginx.conf
server_ tokens off; 关闭版本号
......
[root@www conf]# nginx -t
重启服务,访问网站使用curl -I命令检测
使用PHP处理动态网页
若PHP配置文件中配置了fastcgi param
SERVER_ _SOFTWARE选项
则编辑php-fpm配置文件,将fastcgi_ param
SERVER_ _SOFTWARE对应的值修改为astcgi _param
SERVER_ SOFTWARE nginx ;
Nginx源码文件/usr/src/nginx-1.12.0/src/core/nginx.h
包含版本信息,可以随意设置
重新编译安装,隐藏版本信息
示例
#define NGINX_ VERSION "1.1.1",修改版本号为1.1.1
#define NGINX_ VER "IIS/" ,修改软件类型为IIS
重启服务,访问网站使用curl -|命令检测
Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
Nginx默认使用nobody用户账号与组账号
当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度。
一般针对静态网页设置,对动态网页不设置缓存时间。
设置方法
修改配置文件,在http段、或者server段、或者location段加入对特定内容的过期参数。
示例
修改Nginx的配置文件,在location段加入expires 参数
Location~\.(gif|jpg|jepg|png|bmp|ico)$ {
roote html;
expires 1d;
随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行状态,需要时刻关注Nginx
日志文件。
太大的日志文件对监控是一个大灾难
定期进行日志文件的切割
Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割
通过Linux的计划任务周期性地进行日志切割
#!/bin/bash
#desc: this is used for cut nginx access log every day in 0:0:0
#获取上一天日期
LAST_DAY=$(date -d "-1 day" "+%Y%m%d")
#指定日志存储目录
LOG_PATH="/var/log/nginx"
#指定nginx服务的进程文件位置
PID_PATH="/usr/local/nginx/logs/nginx.pid"
#用于判断日志存储目录是否存在,如果不存在则创建目录
[ -d $LOG_PATH ] || mkdir -p $LOG_PATH
#用于分割日志,移动日志文件并重命名
mv /usr/local/nginx/logs/access.log ${LOG_PATH}/accesss.log-$LAST_DAY
#重新构建新的日志文件
kill -USR1 $(cat $PID_PATH)
#删除30之前的日志文件
find $LOG_PATH -mtime +30 -exec rm -f {} \;
HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户 端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
KeepAlive在一段时间内 保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。
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 连接。
第二个参数(可选的)指定了在响应头Keep-Alive: timeout=t ime中的time值。这个头能够让一 些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送Keep- Alive 响应头。
client_ header_ timeout
客户端向服务端发送-一个完整的request header 的超时时间。如果客户端在指定时间内没有发送一个完整的request header, Nginx返回HTTP 408 (Request Timed Out) 。
client_ body_ timeout
指定客户端与服务端建立连接后发送requestbody的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx返回HTTP 408 (Request Timed Out )。
在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
更改进程数的配置方法
修改配置文件,修改进程配置参数
修改配置文件的worker_processes参数
增加进程数,可减少系统的开销,提升服务速度
使用ps aux查看运行进程数的变化情况
[root@www conf]# cat /proc/cpuinfo | grep -C "physical"
4
[root@www conf]# vi nginx.conf
worker_ processes 4;
[root@www conf]# systemctl restart nginx
[root@www conf]# ps aux | grep nginx
默认情况,Nginx的多个进程可能跑在一 个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU。
在一台4核物理服务器,进行配置,将进程进行分配。
[root@www conf]# vi nginx.conf
worker_ processes 4;
worker_ cpu_ affinity 0001 0010 0100 1000;
1代表CPU的位置
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; #压缩类型,表示哪些网页文档启用压缩功能
vim /usr/ local/nginx/conf/nginx. conf
http {
......
server {
......
location ~* \. (jpglgiflswf)$ {
valid_ referers none blocked * . kgc. com kgc . com;
if ( $invalid referer ) {
rewrite ^/ http: I /www. kgc. com/error。pngi
#return 403;
}
}
......
}
}
~* \. (jpgIgifIswf)$ :这段正则表达式表示匹配不区分大小写,以.jpg或.gif 或.swf结尾的文件:
valid_ referers :设置信任的网站,可以正常使用图片:
none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer 字段的),如http:/ /www. kgc . com/ game.jpg
我们使用http://www. Kgc.com访问显示的图片,可以理解成http://www. kgc . com/game.jpg这个请求是从http://www. Kgc.com这个链接过来的。
blocked: 允许不是http://开头的, 不带协议的请求访问资源;
*. kgc. com: 只允许来自指定域名的请求访问资源,如http://www. Kgc.com
if语句:如果链接的来源域名不在valid_ referers所列出的列表中,$invalid_ referer为true, 则执行后面的操作,即进行重写或返回403 页面。
补充:面试题:用过哪些nginx的模块和做过哪些优化
gzip ### 网站数据压缩
rewrite ### 地址重写
stub_ status ### 统计nginx服务状态
ssl 支持https, ### 得先用openss1或者TLS工具生成相关证书和私钥文件。再在ssl模块配置中调用证书和私钥
upstream ### 使用nginx做反向代理web群集,定义群集服务器池
stream ### 用于定义4层反向代理的
auth_ basic ### 用户认证
fastcgi ### 转发请求给php
--with-模块名 ### 开启模块
--without-模块名 ### 禁用模块
隐藏版本号 、压缩、缓存、防盗链、连续保持、优化工作进程和进程连接数、日志分割、反向代理