nginx配置文件优化

1、调整参数隐藏Nginx版本号信息

一般来说,软件的漏洞都和版本有关,因此我们应尽量隐藏或清除Web服务队访问的用户显示各类敏感信息(例如:Web软件名称及版本号等信息),这样恶意的用户就很难猜到他攻击的服务器所用的是否是特定漏洞的软件,或者是否有对应的漏洞存在。

whereis nginx

vi /etc/nginx/nginx.conf

在HTTP段中添加如下,默认是显示,server_tokens的作用是控制是否显示版本信息
http{

server_tokens off;

}
1.1、测试

curl -I http://192.168.44.11/

HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Wed, 30 Aug 2017 09:37:07 GMT
Content-Type: text/html
Content-Length: 3700
Last-Modified: Mon, 31 Oct 2016 12:37:02 GMT
Connection: keep-alive
ETag: "58173aee-e74"
Accept-Ranges: bytes
修改配置文件重启之后在试试上面的命令对比下

systemctl restart nginx

curl -I http://192.168.44.11/

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 30 Aug 2017 09:40:16 GMT
Content-Type: text/html
Content-Length: 3700
Last-Modified: Mon, 31 Oct 2016 12:37:02 GMT
Connection: keep-alive
ETag: "58173aee-e74"
Accept-Ranges: bytes
2、更改Nginx服务的默认用户

为了防止黑客猜到这个Web服务用户,我们需要更改成特殊的用户名,但这个用户必须是系统事先存在的

useradd nginx_test -s /sbin/nologin -M

id nginx_test

vi /etc/nginx/nginx.conf

将默认的#user xxxx修改如下内容
user nginx_test nginx_test;

systemctl restart nginx

重启之后在查看下进程的用户ps -ef | grep nginx

nginx_t+ 18850 18849 0 10:09 ? 00:00:00 nginx: worker process
nginx_t+ 18851 18849 0 10:09 ? 00:00:00 nginx: worker process
3、优化Nginx服务的worker进程数

Nginx有Master进程和Worker进程之分,Master为管理进程,worker是工作进程
建议设置为CPU的核数或者cpu核数*2的进程数

vi /etc/nginx/nginx.conf

worker_processes 4;
查看CPU核数

grep "processor" /proc/cpuinfo |wc -l

执行top命令,然后按数字1,即可显示所有的cpu核数

systemctl restart nginx

ps -ef | grep nginx

root 18913 1 0 10:27 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx_t+ 18914 18913 0 10:27 ? 00:00:00 nginx: worker process
nginx_t+ 18915 18913 0 10:27 ? 00:00:00 nginx: worker process
nginx_t+ 18916 18913 0 10:27 ? 00:00:00 nginx: worker process
nginx_t+ 18917 18913 0 10:27 ? 00:00:00 nginx: worker process
4、Nginx事件处理模型优化

Nginx的连接处理机制在于不同的操作系统会采用不同的I/O模型,在Linux下,Nginx使用epoll的I/O多路复用模型,在Freebsd中使用kqueue的I/O多路复用模型,在Solaris中使用/dev/poll方式的I/O多路复用模型,在Windows使用的是icop。
events {

events指令是设定Nginx的工作模式及连接数上限

use epoll;
}

根据Nginx的官方文档建议,也可以不指定事件处理模型,Nginx会自动选择最佳的事件处理模型服务
5、调整单个进程允许的客户端最大链接数

worker_connections的值要根据具体服务器性能和程序的内存使用量来指定(一个进程启动使用的内存根据程序确定)
events {

worker_connections  20480;

}
6、worker进程最大打开文件数

最大打开文件数,可设置为系统优化有的ulimit -HSn的结果。

worker_rlimit_nofile 65535;
7、开启高效文件传输模式

sendfile参数用于开启文件的高效传输模式,同时将tcp_nopush和tcp_nodelay两个指定设为on,可防止网络及磁盘I/O阻塞,提升Nginx工作效率。
http {

sendfile  on;
tcp_nopush  on;
tcp_nodelay  on;

}
8、优化连接参数

1.连接超时
当服务器建立的连接没有接收到处理请求时,可在指定的事件内就让它超时自动退出。还有当Nginx和fastcgi服务建立连接请求PHP时,如果因为一些原因(负载高、停止响应)fastcgi服务无法给Nginx返回数据,此时可以通过配置Nginx服务参数使其不会四等。例如:可设置如果Fastcgi 10秒内不能返回数据,那么Nginx就终端本次请求。
1.1、连接超时的作用
设置将无用的连接尽快超时,可以保护服务器的系统资源(CPU、内存、磁盘)
当连接很多时,及时断掉那些已经建立好的但又长时间不做事的连接,以减少其占用的服务器资源,因为服务器维护连接也是消耗资源的。
有时黑客或而恶意用户攻击网站,就会不断和服务器建立多个连接,消耗连接数,但是什么也不操作。只是持续建立连接,这就会大量的消耗服务器的资源,此时就应该及时断掉这些恶意占用资源的连接。
LNMP环境中,如果用户请求了动态服务,则Nginx就会建立连接请求fastcgi服务以及MySQL服务,此时这个Nginx连接就要设定一个超时时间,在用户容忍的时间内返回数据,或者再多等一会后端服务返回数据,具体策略要看业务。
1.2、参数设置
设置客户端连接保持会话的超时时间为60秒。超过这个时间,服务器会关闭该连接,此数值为参考值。
http {

keeplived_timeout 60;

}
设置读取客户端请求头数据的超时时间。如果超过这个时间,客户端还没有发送完整的header数据,服务端将数据返回“Request time out (408)”错误。
http {

client_header_timeout 15;

}
设置读取客户端请求主体的超时时间。这个超时仅仅为两次成功的读取操作之间的一个超时,非请求整个主体数据的超时时间,如果在这个超时时间内,客户端没有发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60.
http {

client_body_timeout 15;

}
设置服务器端传送http响应信息到客户端的超时时间,这个超时时间仅仅为两次成功握手后的一个超时,非请求整个响应数据的超时时间,如在这个超时时间内,客户端没有收到任何数据,连接将被关闭。,默认值为60s,可以改为参考值25s。
http {

send_timeout 25;

}
9、上传的数据大小限制(http Request body size)

设置最大的允许客户端请求主体大小,在请求头域有“Content-Length”,如果超过了此配置值,客户端会收到413错误,意思是请求的条目过大,有可能浏览器不能正确的显示这个错误,设置为0表示禁止检查客户端请求主体大小,此参数对服务端的安全有一定的作用。
http {

client_max_body_size 1m;  #默认值是1m

}

所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!

  Previous post 百度网盘下载工具
Next post   Apache和Nginx的区别

添加新评论

生活其实很简单,过了今天就是明天。

低头哭过别忘了抬头继续走。

不要被任何人打乱自的脚步,因为没有谁会像你一样清楚和在乎自己梦想。

没有人可以打倒我,除非我自己先趴下!

你要记住你不是为别人而活,你是为自己而活。