文章目录
一、Nginx隐藏版本号
- 隐藏版本号,避免安全漏洞泄露
- Nginx隐藏版本号的方法
- 修改配置文件法
- 修改源码法
1.1 修改配置文件法
第一步:将nginx配置文件中的server_tokens选项的值设为off(关闭了版本号)
第二步:重启服务,访问网站使用 curl -I 命令检测
ln -s /usr/local/nginx/conf/nginx.conf /etc/ ##优化路径
vi /etc/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; ##添加 关闭版本号
..... ##此处省略
}
systemctl restart nginx
curl -I http://192.168.40.20
1.2 修改源码法
ln -s /usr/local/nginx/conf/nginx.conf /etc/ ##优化路径
vi nginx-1.12.2/src/core/nginx.h
#define nginx_version 1112202
#define NGINX_VERSION "1.1.1"
#define NGINX_VER "IIS/" NGINX_VERSION
systemctl stop nginx
cd nginx-1.12.2/
make && make install
systemctl start nginx
curl -I http://localhost ## 验证效果
二、修改Nginx用户与组
- Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
- Nginx默认使用nobody用户账号与组账号
- 修改的方法
- 编译安装时指定用户与组
- 修改配置文件指定用户与组
vi /usr/local/nginx/conf/nginx.conf
user nginx nginx; ##修改
ps aux | grep nginx ## 查看效果
三、配置Nginx网页缓存时间
- 当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容请求时直接返回,避免重复请求,加快了访问速度
- 一般针对静态网页设置,对动态网页不设置缓存时间
vi /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm;
expires 1d; ###设置缓存时间为1天
}
未设置前
设置后
四、实现Nginx的日志切割
- 随着Nginx运行时间增加,日志也会增加,为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件
- 太大的日志文件对监控是个大灾难
- 定期进行日志文件的切割
- Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割
- 通过Linux的计划任务周期性的进行日志切割
- 编写脚本进行日志切割的思路
- 设置时间变量
- 设置保存日志路径
- 将目前的日志文件进行重命名
- 重建新日志文件
- 删除时间过长的日志文件
- 设置cron任务,定期执行脚本自动进行日志分割
###获取当天的的日期
[root@server2 ~]# date +%Y%m%d
20201130
###昨天
[root@server2 ~]# date -d "-1 day"
2020年 11月 29日 星期日 17:12:53 CST
###明天
[root@server2 ~]# date -d "+1 day"
2020年 12月 01日 星期二 17:13:06 CST
#!/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 ## 分割日志
kill -HUP $(cat $pid_path) ## 生成日志
find $logs_path -mtime +30 | xargs rm -rf ## 删除30天前的日志
chmod +x rzfg.sh ##给脚本增加执行权限
./rzfg.sh ##执行脚本
cd /var/log/nginx ## 查看生成的日志
crontab -e ## 制作计划
0 1 * * * /usr/bin/sh /root/rzfg.sh
五、配置Nginx实现连接超时
- 为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
- 超时参数
- keepalive_timeout
- 设置连接保持超时时间
- client_header_timeout
- 指定等待客户端发送请求头的超时时间
- client_body_timeout
- 设置请求体读超时时间
- keepalive_timeout
vi /usr/local/nginx/conf/nginx.conf
#keepalive_timeout 0;
keepalive_timeout 65 180;
client_header_timeout 80;
client_body_timeout 80;
六、更改Nginx运行进程数
- 在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免阻塞
- 修改配置文件的worker_processes参数
- 一般设置为cpu的个数或核数
- 在高并发情况下可以设置为cpu个数或核数的2倍
- 增加进程数,可减少了系统的开销,提升了服务速度
- 使用ps aux查看运行进程数的变化情况
cat /proc/cpuinfo | grep -c "physical id" ## 查看cpu的个数
ps aux | grep nginx ## 查看运行进程数
2
vi /usr/local/nginx/conf/nginx.conf
worker_processes 4; ##将进程数改为4
systemctl restart nginx ## 重启服务查看效果
七、配置Nginx实现网页压缩功能
- Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
- 允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
- 可在配置文件中加入相应的压缩功能参数对压缩性能进行优化
vi /usr/local/nginx/conf/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 application/x-javascript text/css image/jpg image/png image/gif application/xml text/javascript application/x-http-php application/javascript application/json;
gzip_disable "MSIE [1-6]\."; ## 配置禁用gzip条件,支持正则,表示ie6以下不启用gzip
gzip_vary on; ## 选择支持very header 可以让前端的缓存服务器缓存经过gzip压缩的页面
八、配置Nginx实现防盗链
- 在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失
- Nginx防盗链功能强大。默认情况下,只需要进行简单的配置,即可实现
- 使用两台主机模拟盗链
ip地址 | 域名 |
---|---|
192.168.40.20(源主机) | www.test1.com |
192.168.40.10(盗链主机) | www.test2.com |
1、源主机防盗链配置:
vi /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; ## error图片自行导入到站点
}
}
2、盗链主机配置:
vi /usr/local/nginx/html/index.html
3、测试:
盗链主机通过域名正常访问
盗链主机通过ip地址访问
九、对FPM模块进行参数优化
- Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
- 根据服务器的内存与服务负载,调整FPM模块参数
- 启动fpm进程方式,通过pm参数指定
- static:将产生固定数量的fpm进程
- dynamic:将以动态的方式产生fpm进程
- FPM优化参数
- static的方式的参数
- pm.max_children:指定启动的进程数
- Dynamic方式的参数
- pm.max_children:指定启动进程数的最大值
- pm.start_servers:动态方式下初始的fpm进程数
- pm.min_spare_servers:动态方式下最小的fpm空闲进程数
- pm.max_spare_servers:动态方式下对打的fpm空闲进程数
- static的方式的参数
FPM优化参数调整示例:
优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
优化参数调整:FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多
可以有20个进程存在
vi /usr/local/php/etc/php-fpm.d/www.conf
pm = dynamic
pm.max_children = 20 ## static模式下空闲进程数上限,大于下面的值
pm.start_servers = 5 ## 动态方式下默认开启的进程数,在最小和最大之间
pm.min_spare_servers = 2 ## 动态方式下最少空闲进程数
pm.max_spare_servers = 8 ## 动态方式下最大空闲进程数
##验证
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php-fpm.d/www.conf
netstat -ntap | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2094/php-fpm: maste