Nginx服务优化

本篇重点

nginx版本隐藏

nginx版本号伪装

nginx超时时间管理

nginx进程管理

nginx日志分割

实验前提:

手工编译安装完成Nginx服务

一、nginx版本隐藏

nginx服务是默认显示版本号的,

[root@localhost nginx]# curl -I http://192.168.142.128
HTTP/1.1 200 OK
Server: nginx/1.12.2                  //默认是显示版本号的
Date: Wed, 13 Nov 2019 08:11:41 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 13 Nov 2019 08:04:45 GMT
Connection: keep-alive
ETag: "5dcbb91d-264"
Accept-Ranges: bytes

这样就给人家看到你的服务器nginx版本是1.12.2,这样暴露出来的版本号就容易变成攻击者可利用的信息。所以,从安全的角度来说,隐藏版本号会相对安全些!

下面就开始隐藏版本号的步骤:

[root@localhost nginx]# pwd
/usr/local/nginx
[root@localhost nginx]# vim conf/nginx.conf              //主配置文件
在server段后面空白处,添加
	server_tokens off;
wq保存退出
[root@localhost nginx]# service nginx stop               //重启服务
[root@localhost nginx]# service nginx start

现在,重启服务后,再次查看版本号

[root@localhost nginx]# curl -I http://192.168.142.128
HTTP/1.1 200 OK
Server: nginx                          //版本号已隐藏
Date: Wed, 13 Nov 2019 08:20:17 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 13 Nov 2019 08:04:45 GMT
Connection: keep-alive
ETag: "5dcbb91d-264"
Accept-Ranges: bytes

二、nginx版本号伪装

除了将版本号进行隐藏,我们还可以反将一波,可以给意图不轨者一个错误的版本号,修改nginx.h文件 (缺点:需要将nginx重新进行编译安装)

[root@localhost nginx]# cd /opt/nginx-1.12.2/src/core/
修改该目录下源码文件nginx.h
[root@localhost core]# vim nginx.h 
#define NGINX_VERSION      "9.9.9"
	修改伪装版本号

将nginx进行重新编译安装

[root@localhost core]# cd /opt/nginx-1.12.2/
[root@localhost nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx
[root@localhost nginx-1.12.2]# make && make install             //重新进行编译安装
[root@localhost nginx-1.12.2]# cd /usr/local/nginx/conf/
[root@localhost conf]# service nginx stop                       //重启服务
[root@localhost conf]# service nginx start

检查是否伪装成功(确保主配置文件中server_tokens on;

[root@localhost conf]# curl -I http://192.168.142.128
HTTP/1.1 200 OK
Server: nginx/9.9.9                      //伪装成功
Date: Wed, 13 Nov 2019 08:38:17 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 13 Nov 2019 08:04:45 GMT
Connection: keep-alive
ETag: "5dcbb91d-264"
Accept-Ranges: bytes

三、nginx超时时间管理

为了保证资源的最有效的利用,不被长时间不进行操作的用户所占用,因此就需要进行超时时间的管理。

修改主配置文件

[root@localhost conf]# pwd
/usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf
找到'keepalive_timeout',修改并在下面添加
	keepalive_timeout  65 180;       #前后分别为服务器端超时时间,客户端超时时间。
    client_header_timeout 80;         #等待客户端发送请求头的超时时间
    client_body_timeout 70;          #客户端发请求体超时时间

[root@localhost conf]# service nginx stop 
[root@localhost conf]# service nginx start

四、nginx进程管理

通常默认情况下,nginx的运行进程(worker_processes)仅为1

[root@localhost conf]# ps aux | grep nginx
root      43055  0.0  0.0  20540   608 ?        Ss   17:13   0:00 nginx: master process /usr/local/nginx/sbin/nginx     //主进程不可改变
nginx     43056  0.0  0.0  23064  1380 ?        S    17:13   0:00 nginx: worker process    //工作进程可以根据具体情况手动进行更改
root      43189  0.0  0.0 112728   968 pts/1    S+   17:25   0:00 grep --color=auto nginx

为了给有多核处理器的服务器有更高的处理效率,我们需要对进程进行修改(本次实验环境为2核服务器)

[root@localhost conf]# pwd
/usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf
搜索'worker_processes',并添加
	worker_processes  2;          #修改为与cpu数量相同   
	worker_cpu_affinity 01 10;      #设置每个进程由不同cpu处理
[root@localhost conf]# service nginx stop       #重启服务
[root@localhost conf]# service nginx start

此时,我们再次查看nginx的进程(会拥有两条工作进程)

[root@localhost conf]# ps aux | grep nginx
root      43353  0.0  0.0  20540   604 ?        Ss   17:36   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     43354  0.0  0.0  23064  1372 ?        S    17:36   0:00 nginx: worker process
nginx     43355  0.0  0.0  23064  1364 ?        S    17:36   0:00 nginx: worker process
root      43367  0.0  0.0 112728   972 pts/1    S+   17:37   0:00 grep --color=auto nginx

五、nginx日志分割

每天都有大量的日志,日积月累,查询累死人怎么办?放心!日志分割来帮你。

所需只有一个脚本和一份计划任务:

脚本

[root@localhost nginx]# vim fenge.sh
#!/bin/bash
#每隔一天进行一次分割,每隔20天清理一次日志文件
pid="/usr/local/nginx/logs/nginx.pid"
log="/usr/local/nginx/logs/access.log"
time=`date -d "-1 day" "+%Y%m%d"`
[ -d "/var/log/nginx" ] || mkdir -p /var/log/nginx
mv $log /var/log/nginx/access.log-$time        #建立分割日志
pidhao=`cat $pid`
kill -USR1 $pidhao                          #日志分割
find /var/log/nginx -mtime +20 | xargs rm -rf      #清理20天前的日志文件

计划任务

[root@localhost nginx]# crontab -e
添加
* * */1 * * /usr/local/nginx/fenge.sh     //每隔一天执行

未完待续