Nginx网页安全优化
- 修改用户组
- 修改方法
- Nginx日志分割
- 日志分割脚本
- 隐藏版本信息
- 隐藏版本号
- 修改版本信息
- 连接超时
- 设置连接超时
- 网页压缩
- 参数配置
- 网页缓存
- 参数配置
- 更改Nginx运行进程数
- 修改系统文件数上限值
- 开启支持高并发
- fpm模块参数优化
- 防盗链
- 盗用图片
- 配置方法
- 盗用失败
修改用户组
Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
Nginx默认使用nobody用户账号与组账号
修改的方法:
编译安装时指定用户与组
修改配置文件指定用户与组
修改方法
- 编译时修改
./configure --user=nginx --group=nginx
- 修改配置文件
user nginx nginx;
Nginx日志分割
随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件。
太大的日志文件对监控是一个大灾难,需要定期进行日志文件的分割。
Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动分割,通过Linux的计划任务周期性的进行日志分割。
日志分割脚本
vi /usr/local/nginx/conf/nginx.conf
error_log logs/error.log info;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main; ###去除前面#号
nginx -t ###检查配置文件是否正确
vi fenge.sh
#!/bin/bash
# fenge
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天前的日志(xargs用来传递参数)
chmod +x fenge.sh
./fenge.sh
cd /var/log/nginx/
ll
常用日期格式
###获取当天的的日期
date +%Y%m%d
20201016
date
2020年 10月 16日 星期五 15:40:12 CST
###昨天
date -d "-1 day"
2020年 10月 15日 星期四 15:41:09 CST
###明天
date -d "day"
2020年 10月 17日 星期六 15:41:51 CST
###前一天的日期
date -d "-1 day" +%d
###前一小时
date -d "-1 hour" +%H
###前一分钟
date -d "-1 min" +%M
###前一秒钟
date -d "-1 second" +%S
隐藏版本信息
隐藏版本号
vi /usr/local/nginx/conf/nginx.conf
server_tokens off;
##若在http模块中加,为全局设置
##在server模块内加,为当前主机设置
- 隐藏前
- 隐藏后
修改版本信息
vi /usr/local/nginx/conf/nginx.conf
server_tokens on;
vi /root/nginx-1.12.0/src/core/nginx.h
#define nginx_version 1012000
#define NGINX_VERSION "1.1.1" ##修改版本号
#define NGINX_VER "IIS/" NGINX_VERSION ##修改搭建使用软件服务
cd /root/nginx-1.12.2/
make && make install
连接超时
为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
超时参数:
Keepalive_timeout:设置连接保持超时时间
Client_header_timeout:指定等待客户端发送请求头的超时时间
Client_body_timeout:设置请求体读超时时间
设置连接超时
vi /usr/local/nginx/conf/nginx.conf
keepalive_timeout 20 180;
#前面参数是服务器主动关闭的超时时间,后面参数是客户机浏览器主动关闭的时间
client_header_timeout 150;
等待客户端发送请求头的超时时间,超时会发送408错误
client_body_timeout 100;
设置客户端发送请求体超时时间
request如果是post才有请求体,get没有请求体
网页压缩
Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
可在配置文件中加入相应的压缩功能参数对压缩性能进行优化
参数配置
[root@localhost ~]# vi /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/png image/gif application/xml text/javascript application/x-http-php application/javascript application/json;
gzip_vary on; ###选择支持vary header可以让前端的缓存服务器缓存经过gzip压缩的页面
[root@localhost ~]# vi /usr/local/nginx/html/index.html ###插入图片
<img src=a.jpg / >
</body>
</html>
[root@localhost ~]# systemctl restart nginx
网页缓存
当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度
一般针对静态网页设置,对动态网页不设置缓存时间
参数配置
vi /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm;
expires 1d; ###设置缓存时间为1天
}
更改Nginx运行进程数
1、在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞。
2、修改配置文件的worker_processes参数
一般设为CPU的个数或者核数
在高并发情况下可设置为CPU个数或者核数的2倍
3、增加进程数,可减少了系统的开销,提升了服务速度
4、使用ps aux查看运行进程数的变化情况
vi /usr/local/nginx/conf/nginx.conf
worker_processes 4; #例,使用4个CPU内核
worker_cpu_affinity 0001 0010 0100 1000; #例,将进程分给4个内核
修改系统文件数上限值
ulimit -n #查看当前系统文件数上限值
##修改系统文件数上限值3种方法
①:ulimit -n 65535 >> /etc/rc.local
②:ulimit -n 65535 >> /etc/profile
③:在/etc/security/limits.conf最后增加
* soft nofile 65535 ##操作系统级别对每个用户创建的进程数的软限制
* hard nofile 65535 ##操作系统级别对每个用户创建的进程数的硬限制
* soft nproc 65535 ##每个进程可以打开的文件数的软限制
* hard nproc 65535 ##每个进程可以打开的文件数的硬限制
开启支持高并发
vi /usr/local/nginx/conf/nginx.conf
events {
use epoll; ##开启支持多并发连接数
worker_connections 4096; ##每个进程最大连接数
}
fpm模块参数优化
Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
根据服务器的内存与服务负载,调整FPM模块参数
启动fpm进程方式,通过pm参数指定
static:将产生固定数量的fpm进程
dynamic:将以动态的方式产生fpm进程
pm.max_children :static 方式下开启的 fpm 进程数
pm.start_servers :动态方式下初始的 fpm 进程数量
pm.min_spare_servers :动态方式下最大的 fpm 空闲进程数
pm.max_spare_servers :动态方式下最大的 fpm 空闲进程数
优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
优化参数调整
FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程存在
[root@localhost ~]# vi /usr/local/php/etc/php-fpm.d/www.conf
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
[root@localhost ~]# /usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php-fpm.d/www.conf
[root@localhost ~]# netstat -ntap | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2094/php-fpm: maste
防盗链
~* \.(jpg|gif|swf)$:匹配以.jpg或.gif或.swf结尾的不区分大小写的文件
valid_referers:设置信任的网站,即能引用相应图片的网站
网址或域名:referer中包含相关字符串的网址
if语句:如果链接的来源域名不在vaild_referers所列出的列表中,$invalid_referer为1
盗用图片
源网页
盗用网页
配置方法
vi /usr/local/nginx/conf/nginx.conf
location ~* \.(gif|jpg|jpeg)$ {
valid_referers 192.168.10.13;
if ($invalid_referer) {
rewrite ^/ http://192.168.10.13/fake.png;
}
}
盗用失败