1.隐藏Nginx的版本
一般来说,软件的漏洞都和版本有关的。为了减少被人针对某一版本的恶意攻击,我们可以把我们的Nginx版本隐藏起来,提高被攻击的门槛。在隐藏版本号之前,我们可以通过curl获取到软件版本。
隐藏Nginx的版本号可以通过修改nginx.conf配置文件,在http段标签内添加 "server_tokens off"的参数
修改之后检查语法问题,没有的话重载配置文件
/usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload
再次用curl来检查,可以看到已经把nginx的版本信息给隐藏了。
如果要做到像下图百度那样修改服务器的名称,需要Nginx的源码文件然后编译安装的,这里就不做介绍,请自行百度。
2.优化Nginx服务的worker进程的个数
在高并发,高访问量的web服务场景,需要事先启动好更多的Nginx进程,以保证快速响应并处理大量并发用户的请求。Nginx有Master进程和worker进程之分,Master为管理进程,真正负责响应处理请求的是worker进程。在搭建Nginx服务时,如果我们不知道如何调整,我们可以把worker数目调整为CPU数目一致;在高并发的场合下,可能worker的数目为CPU的两倍。worker的数目调整很简单,在nginx.conf的配置文件下,直接修改即可。下面我们来验证下究竟多少的worker才合适。
(1)cpu核心数目为2(单核双线程),worker数目为1的性能情况
在并发量为1000和并发为5000测试到的性能结果(本打算测试并发10000的情况,结果测试的客户机承受不了,挂了)
可以看出,在并发为1000的时候,处理页面的速度更快,差不多是3倍的差距。在并发5000的时候,已经出现了失败的情况,也就是说服务器的性能处理不过来了,下面我们修改worker数目之后对比下。
(2)cpu核心数目为2(单核双线程),worker数目为2的性能情况
在并发量为1000和并发为5000测试到的性能结果
从测试的结果中可以看出,修改了worker数目之后。Nginx的处理速度下降了,但是在高并发的情况下缺不出现失败的情况,也就是说处理并发的能力提高了。至于怎么调整,还是需要根据实际情况来调整。
3.绑定不同的Nginx进程到不同的CPU上
在nginx.conf配置文件里面添加一行来给不同的进程分配CPU
1 worker_processes 2; 2 worker_cpu_affinity 01 10; #01、10为掩码,意思是使用第一个CPU和第二个CPU
然后测试,结果如下。对比发现没有任何的性能提升,应该是Nginx程序本身已经做了优化,自己分配好CPU的调度。在测试的时候发现,CPU的使用率两个都比较平均的。
4.开启高效文件传输模式
sendfile参数用于开启文件的高效传输模式。同时吧tcp_nopush和tcp_nodelay两个参数设置为on,可以防止网络及磁盘I/O阻塞,提升Nginx工作效率。
sendfile on; tcp_nopush on; tcp_nodelay on;
开启之后发现性能也是没有什么提升,查看nginx.conf.default发现这是默认开启的了。
5.优化Nginx连接参数,调整连接超时时间
在Nginx建立了连接之后,当服务器建立的连接没有接收处理的请求时,可以在指定的时间内就让它超时自动退出。还有当Nginx和FastCGI服务建立连接请求PHP是,如果因为一些原因(负载高,停止响应),FastCGI服务无法给Nginx返回数据,此时可以通过配置Nginx服务参数使其不会死等,因为前面用户还在等待它返回的数据。例如,可以设置如果请求FastCGI 10秒内不能返回数据,那么Nginx就中断本次请求,向用户汇报取不到数据的错误。
实际上,这些参数用默认的即可,下面是一些参考的配置。
keepalive_timeout 60; #设置客户端连接会话保持时间为60秒,超过这个时间,服务器会关闭该连接 client_header_timeout 15; #设置读取客户请求头数据的超时时间,超过这个时间,客户端没有返回完整的header数据,服务器将返回"request time out" client_body_timeout 15; #设置读取客户端请求主题的超时时间 send_timeout 25; #指定响应客户端的超时时间,如果超过这个时间客户端没有活动,Nginx会关闭连接。
6.上传文件大小的限制(以wordpress为例)
之前我们在Nginx服务器上搭建了wordpress程序,wordpress程序上传文件的大小限制是2M。在今时今日来说,这个限制太小了,我们把它修改为8M看看。
用vim打开/usr/local/php/lib/php.ini文件,然后把upload_max_filesize的值改为8M,重启php-fpm服务。
然后我们看到wordpress的多媒体上传页面已经显示为8M,上传一个大小为3M的图片,测试
出现了以下的错误,实际上上传的文件还是过大了。这个过大是Nginx服务认为过大了,Nginx的文件大小限制也是需要设置下的。
用vim打开nginx.conf,在http区块添加一行,然后重新加载nginx配置文件。然后上传成功。
client_max_body_size 8m;
7.设置Nginx expires缓存
Nginx的expires的功能就是为用户访问的网站内容设定一个过期的时间,当用户第一次访问这些内容时,会把这些内容存储到浏览器本地,这样用户第二次及以后继续访问该网站时,浏览器会检查加载已经缓存到浏览器本地的内容,就不会去服务器下载了,知道缓存的内容过期或被清除为止。
expires可以减低网站的带宽,节约成本;加快用户的访问网站的速度,提升用户访问体验。但是如果网站更新内容比较频繁的话,就需要另外注意当用户更新的时候,用户看到的是不是缓存下来旧的内容。所以,这个expires的时间,我们要根据实际情况去更改,下面我们设置wordpress的css和图片内容缓存的时间为7天。在虚拟主机blog.conf的配置文件里面添加几行:
location ~ .*\.(gif|jpeg|jpg|bmp|png|swf)$ { expires 7d; root html/blog; } location ~ .*\.(js|css)?$ { expires 7d; }
检查语法没有问题之后,重载配置文件,然后用curl来检查,看到了expires的时间为7天。
原文地址:http://blog.51cto.com/superpcm/2094252