Nginx安全优化

一、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"
20201129日 星期日 17:12:53 CST

###明天
[root@server2 ~]# date -d "+1 day"
20201201日 星期二 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
      • 设置请求体读超时时间
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大小为416k缓冲区大小
    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空闲进程数

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值