设为首页 收藏本站
查看: 682|回复: 0

[经验分享] Nginx服务优化——性能与安全

[复制链接]

尚未签到

发表于 2018-11-10 10:55:34 | 显示全部楼层 |阅读模式
  1.隐藏Nginx的版本
  一般来说,软件的漏洞都和版本有关的。为了减少被人针对某一版本的恶意***,我们可以把我们的Nginx版本隐藏起来,提高被***的门槛。在隐藏版本号之前,我们可以通过curl获取到软件版本。
DSC0000.jpg

  隐藏Nginx的版本号可以通过修改nginx.conf配置文件,在http段标签内添加 "server_tokens off"的参数
DSC0001.jpg

  修改之后检查语法问题,没有的话重载配置文件
/usr/local/nginx/sbin/nginx -t  
/usr/local/nginx/sbin/nginx -s reload
  再次用curl来检查,可以看到已经把nginx的版本信息给隐藏了。
DSC0002.jpg

  如果要做到像下图百度那样修改服务器的名称,需要Nginx的源码文件然后编译安装的,这里就不做介绍,请自行百度。
DSC0003.jpg

  2.优化Nginx服务的worker进程的个数
  在高并发,高访问量的web服务场景,需要事先启动好更多的Nginx进程,以保证快速响应并处理大量并发用户的请求。Nginx有Master进程和worker进程之分,Master为管理进程,真正负责响应处理请求的是worker进程。在搭建Nginx服务时,如果我们不知道如何调整,我们可以把worker数目调整为CPU数目一致;在高并发的场合下,可能worker的数目为CPU的两倍。worker的数目调整很简单,在nginx.conf的配置文件下,直接修改即可。下面我们来验证下究竟多少的worker才合适。
  (1)cpu核心数目为2(单核双线程),worker数目为1的性能情况
DSC0004.jpg

DSC0005.jpg

  在并发量为1000和并发为5000测试到的性能结果(本打算测试并发10000的情况,结果测试的客户机承受不了,挂了)
DSC0006.jpg

DSC0007.jpg

  可以看出,在并发为1000的时候,处理页面的速度更快,差不多是3倍的差距。在并发5000的时候,已经出现了失败的情况,也就是说服务器的性能处理不过来了,下面我们修改worker数目之后对比下。
  (2)cpu核心数目为2(单核双线程),worker数目为2的性能情况
DSC0008.jpg

DSC0009.jpg

  在并发量为1000和并发为5000测试到的性能结果
DSC00010.jpg

DSC00011.jpg

  从测试的结果中可以看出,修改了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的使用率两个都比较平均的。
DSC00012.jpg

DSC00013.jpg

  4.开启高效文件传输模式
  sendfile参数用于开启文件的高效传输模式。同时吧tcp_nopush和tcp_nodelay两个参数设置为on,可以防止网络及磁盘I/O阻塞,提升Nginx工作效率。
sendfile        on;  
tcp_nopushon;
  
tcp_nodelayon;
  开启之后发现性能也是没有什么提升,查看nginx.conf.default发现这是默认开启的了。
DSC00014.jpg

  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看看。
DSC00015.jpg

  用vim打开/usr/local/php/lib/php.ini文件,然后把upload_max_filesize的值改为8M,重启php-fpm服务。
DSC00016.jpg

  然后我们看到wordpress的多媒体上传页面已经显示为8M,上传一个大小为3M的图片,测试
DSC00017.jpg

  出现了以下的错误,实际上上传的文件还是过大了。这个过大是Nginx服务认为过大了,Nginx的文件大小限制也是需要设置下的。
DSC00018.jpg

  用vim打开nginx.conf,在http区块添加一行,然后重新加载nginx配置文件。然后上传成功。
client_max_body_size 8m;
DSC00019.jpg

  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天。
DSC00020.jpg




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-633177-1-1.html 上篇帖子: 15.Nginx负载均衡&SSL密钥对&Nginx配置SSL 下篇帖子: centos nginx下安装phpmyadmin
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表