配置Nginx隐藏版本号
隐藏Nginx版本号,避免安全漏洞泄漏Nginx隐藏版本号的方法
修改配置文件法
修改源码法
修改配置文件方法
a:将Nginx配置文件中server_tokens选项的值设置为off
[root@www conf]# vi nginx.conf
server_tokens off:关闭版本号
[root@www conf]# nginx -t
b:重启服务,访问网站使用curl-l命令检测
[root@www conf]# systemctl restart nginx
[root@www conf]# curl -l http://192.168.0.102/
HTTP/1.1200 oK
Server: nginx
c:使用PHP处理动态网页
- 若PHP配置文件中配置了fastcgi_param
SERVER_SOFTWARE选项 - 则编辑php-fpm配置文件,将fastcgi_param
SERVER_SOFTWARE对应的值修改为astcgi_param
SERVER_SOFTWARE nginx ;
修改Nginx用户与组
- Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
- Nginx默认使用nobody用户账号与组账号
- 修改的方法
编译安装时指定用户与组
修改配置文件指定用户与组
配置Nginx网页缓存时间
- 当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度
- 一般针对静态网页设置,对动态网页不设置缓存时间
- 设置方法
修改配置文件,在http段、或者server段、或者location段加入对特定内容的过期参数 - 示例
修改Nginx的配置文件,在location段加入expires参数
location ~ \.(gifljpgljepglpng/ bmp| ico)$ {
root html;
expires 1d;
实现Nginx的日志切割
- 编写脚本进行日志切割的思路
设置时间变量
设置保存日志路径
将目前的日志文件进行重命名重建新日志文件
删除时间过长的日志文件
设置cron任务,定期执行脚本自动进行日志分割(业务正在对外提供服务的,业务关闭的时候进行日期切割/升级、迁移)
编写脚本进行日志切割的思路
[root@www logs]# vim lopt/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 ] |l mkdir -p $logs_path
mv /usr/local/nginx/logslaccess.log ${logs_path}/test.com-access.log-$d 脚本执行后创建的日志进行命名(时间戳的方式标记唯一性)
kill -USR1 $(cat $pid_path) reload——>生成新的access.log
find $logs_path -mtime +30 xargs rm -rf
配置Nginx实现连接超时
- 为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
- 超时参数
Keepalive_timeout
设置连接保持超时时间
Client_header_timeout
指定等待客户端发送请求头的超时时间
Client_body_timeout
设置请求体读超时时间
更改Nginx运行进程数
- 在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
- 更改进程数的配置方法
修改配置文件,修改进程配置参数 - 修改配置文件的worker_processes参数
一般设为CPU的个数或者核数
在高并发情况下可设置为CPU个数或者核数的2倍 - 增加进程数,可减少了系统的开销,提升了服务速度
- 使用ps aux查看运行进程数的变化情况
[root@www conf#t 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;
配置Nginx实现网页压缩功能
- Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
- 允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
- 可在配置文件中加入相应的压缩功能参数对压缩性能进行优化
- 压缩功能参数
gzip on:开启gzip压缩输出
gzip_min_length 1k:设置允许压缩的页面最小字节数
gzip_buffers 4 16k:申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
gzip_http_version 1.0:设置识别http协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,但处理较慢,也比较消耗服务器CPU资源 - 压缩功能参数(续)
gzip_comp_level 2:指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理速度最慢
gzip_types text/plain:压缩类型,对哪些网页文档启用压缩功能
gzip_vary on:让前端缓存服务器缓存经过gzip压缩的页面 - 将以上的压缩功能参数加入到主配置文件httpd配置中段
- 重启服务,查看网页压缩功能开启结果
对FPM模块进行参数优化
- Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
- 根据服务器的内存与服务负载,调整FPM模块参数
- 启动fpm进程方式,通过pm参数指定
static:将产生固定数量的fpm进程.
dynamic:将以动态的方式产生fpm进程 - FPM优化参数
1、Static的方式的参数
pm.max_children:指定启动的进程数量
2、Dynamic方式的参数
pm.max_children:指定启动进程数的最大值
pm.start_servers:动态方式下初始的fpm进程数
pm.min_spare_servers:动态方式下最小的fpm空闲进程数
pm.max_spare_servers:动态方式下最大的fpm空闲进程数 - FPM优化参数调整示例
1、优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
2、优化参数调整
FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程存在
vi php-fpm.conf
pid = run/php-fpm.pid
pm = dynamic
pm.max_children=20 #static模式下空闲进程数上限,大于下面的值
pm.start_servers = 5 #动态方式下默认开启的进程数,在最小和最大之间
pm.min_spare_servers = 2 #动态方式下最少空闲进程数
pm.max_spare_servers = 8 #动态方式下最大空闲进程数
本章总结
Nginx优化方法:
隐藏软件版本号
设置连接超时
更改程序运行用户与组
更改进程数
配置网页缓存时间
配置网页压缩与防盗链
Nginx日志切割
fpm参数优化
Nginx隐藏版本
1、在生产环境中,需要隐藏Nginx的版本号,以避免安全漏洞的泄露
2、查看方法
本地:curl -T http://192.168.128.100 查看的是头部信息
浏览器:可以直接在浏览器(谷歌)——>开发者工具,选择network——>重新加载页面——>选择请求——>选择headlers——>查看版本
3、nginx隐藏版本号的方法
- 修改配置文件
- 修改源代码
a:修改配置文件
[root@wang ~]# vim /usr/local/nginx/conf/nginx.conf
b:检查语法
c:重新启动,查看头部信息
[root@wang ~]# systemctl restart nginx
[root@wang ~]# curl -I http://192.168.112.100
a.1:修改源码
[root@wang ~]# vim /opt/nginx-1.12.0/src/core/nginx.h
b.1:重新编译
cd /opt/nginx-1.15.9/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
c.1:在配置文件中把显示版本号打开
d.1:重启获取头部信息
修改用户和组
- Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
- Nginx默认使用nobody用户账号与组账号
- 修改的方法
1、编译安装时指定用户与组修
2、改配置文件指定用户与组
[root@wang ~]# vim /usr/local/nginx/conf/nginx.conf
[root@wang~ ]# ps aux | grep nginx 查看用户和组是否修改成功
配置Nginx网页缓存时间
a:修改配置文件
[root@wang ~]# vim /usr/local/nginx/conf/nginx.conf
b:上传图片
[root@wang ~]# cd /usr/local/nginx/html
c:编辑html文件
[root@wang html]# vim index.html
d:访问
e: 查看配置缓存时间是否成功
Nginx日志分割
随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件,太大的日志文件对监控是很难管理。
所以要定期进行日志文件的切割(以固定点,时间戳的方式定义日志)。
Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割,通过Linux的计划任务周期性地进行日 志切割。
a:编写脚本进行日志分隔的思路
设置时间变量
设置保存日志路径
将目前的日志文件进行重命名重建新日志文件
删除时间过长的日志文件
设置cron任务,定期执行脚本自动进行日志分割
b:创建日志分隔脚本
[root@wang html]# vim rizhi.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}/test.com-access.log-$d 移动日志并重新命名(以时间戳的方式标记唯一性)
kill -HUP $(cat $pid_path) 重载生成新的access日志
find $logs_path -mtime +30 | xargs rm -rf
c: 为脚本增加可执行权限
[root@wang html]# chmod +x rizhi.sh
配置Nginx实现连接超时
编辑主配置文件
更改Nginx运行进程数
在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
a:更改进程数的配置方法
1、修改配置文件,
2、修改进程配置参数
b:修改配置文件的worker_processes参数
- 一般设为CPU的个数或者核数
- 在高并发情况下可设置为CPU个数或者核数的2倍
- 增加进程数,可减少了系统的开销,提升了服务速度
- 使用ps aux查看运行进程数的变化情况
默认情况,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU
c:查看cpu核数和进程参数
[root@wang html]# cat /proc/cpuinfo | grep -c "physical"
[root@wang html]# ps aux | grep nginx
d: cpu和进程参数对比
-
2 核cpu,开启2个进程
worker_processes 2; //修改为核数相同或者2倍
worker_cpu_affinity 01 10;1000
//设置每个进程由不同cpu处理,进程数配为2时为0001、0010、0100、
PS:
01表示启用第一个CPU内核,10表示启用第二个CPU内核
worker_cpu_affinity 01 10;表示开启两个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核。 -
2核cpu,开启4个进程
worker_processes 4;
worker_cpu_affinity 01 10 01 10;
PS:开启了四个进程,它们分别对应着开启2个CPU内核
- 4个cpu,开启4个进程
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
ps:0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推
配置Nginx实现网页压缩功能
a:编辑主配置文件
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最大压缩比,处理速度慢,传输速度快(建议5-6)
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
gzip_vary on; #支持前端缓存服务器存储压缩页面
b:插入图片
c:重启服务,测试