这篇文章的目的是要谈谈我的 Nginx 调优经验,就不涉及数据库调优的内容了。

初始服务器设置

我的服务器运行在亚马逊 EC2 t1 micro 上,选择 Nginx + PHP5-fpm 作为后端,因为一些安全因素还打开了SSL。

性能测试

我使用了Blitz.io 来进行压力测试。下面是我使用的命令参数:

  1. -p 1-250:60 https://mydomian.com

这是一个用户线性递增的测试,每个测试用户跑60秒。Blitz.io为每个请求每秒增加4个( = rise / run = 260 / 60)测试用户。

结论

我把结论提前写在这里,如果你不想读完整篇文章也没有问题。

  1. Nginx默认设置的DH算法(译注:Diffie-Hellman key exchange algorithm)是影响SSL性能的最大因素,因此采用如下设置能增加SSL性能:
  1. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  2. ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
  3. ssl_prefer_server_ciphers on;
  4. ssl_session_cache shared:SSL:10m;
  5. ssl_session_timeout 10m;
  1. 升级硬件 Upgrade your EC2 from t1.micro to c1.medium
  2. 正确配置 Nginx的worker进程数量 Set Nginx to have 2 worker processes as a c1.medium gives you 2 CPUs

细节解释

以下是我进行测试的详细过程。

尝试1:升级硬件

直觉告诉我,想解决性能问题的直接途径就是升级硬件,我把EC2实例从t1.micro升级到了为高流量而优化过的c1.medium

升级后的测试结果:

巅峰时服务器的hits达到50/sec,压力增加时,time-out增加,hits减少。

尝试2:测试CPU性能

我打开top然后重启了测试,注意到2个CPU的使用率不到13%,内存使用了300Mb,很明显硬件没有充分利用。所以我更改了nginx的设置:

  1. worker_processes 2;

尝试3,4,5:调整Nginx和PHP5-fpm

以下尝试得到的结果都和尝试1相同

尝试3:

nginx.conf

  1. worker_processes 2;
  2. events {
  3. worker_connections 19000;
  4. multi_accept on;
  5. }
  6. ...

尝试4:

nginx.conf

  1. worker_processes 2;
  2. events {
  3. worker_connections 19000;
  4. multi_accept on;
  5. }
  6. http {
  7. gzip on;
  8. gzip_disable "msie6";
  9. gzip_min_length 1000;
  10. gzip_proxied expired no-cache no-store private auth;
  11. gzip_types text/plain application/xml application/javascript text/css application/x-javascript;
  12. }
  13. ...

尝试5:

在尝试4未变的情况下我更改了php5-fpm的设置:

  1. pm.max_children = 160
  2. pm.start_servers = 24
  3. pm.min_spare_servers = 20
  4. pm.max_spare_servers = 35
  5. pm.max_requests = 1500

尝试6:在另一个服务器部署

我有一个1.5Gb RAM和8CPU的Linode服务器,采用刚才的设置,这是我的测试结果:

Linode的服务器的结果棒极了!我的第一个直觉是难道Linode比EC2好吗。在我把我的服务迁移到Linode之前我想确保两者仅有的对性能有可能产生影响的不同被排除掉。

尝试7:大惊喜

我Google到Nginx在SSL上有些问题。Nginx默认使用DHE算法来产生密匙,改变这个设置应该能使它快一些。

这里是我参考的一些文章:

  • http://matt.io/entry/ur
  • http://auxbuss.com/blog/posts/2011_06_28_ssl_session_caching_on_nginx/

所以我更改了nginx.conf,删掉了kEDH算法

  1. worker_processes 2;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. gzip on;
  7. gzip_disable "msie6";
  8. gzip_min_length 1000;
  9. gzip_proxied expired no-cache no-store private auth;
  10. gzip_types text/plain application/xml application/javascript text/css application/x-javascript;
  11. ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+EXP;
  12. }
  13. ...

下图是测试结果:

效果很显著!

尝试8: 硬件提升是必要的吗

现在我的EC2和Linode表现差不多了。但是我真的需要升级到c1.medium实例才能实现这个性能的提升吗?或许不是这样……所以我把我改回了t1.micro。因为t1.micro实例只有一个CPU,所以我把worder_processes设置改回1。下面是测试的结果:

所以答案是肯定的,硬件上的提升是必要的。

尝试9:

有人在 Hacker News 上反馈说我的SSL密匙不能满足Perfect Forward Secrecy,我采用了他们的建议,对我的SSL设置做了如下更改:

  1. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  2. ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
  3. ssl_prefer_server_ciphers on;
  4. ssl_session_cache shared:SSL:10m;
  5. ssl_session_timeout 10m;

现在这个设置应该满足Perfect Forward Secrecy协议了。我重新跑了测试:

太棒了,性能也没有下降。很棒的学习经验!

原文发布时间为:2013-08-06

本文来自云栖社区合作伙伴“Linux中国”

Nginx SSL 性能调优相关推荐

  1. 【网站架构】Nginx负载均衡宕机怎么办?Nginx性能调优、集群、高可用方案

    ​ 大家好,欢迎来到停止重构的频道. 本期,我们讨论Nginx的性能调优. Nginx一般是作为网站系统的反向代理或负载均衡,但这里有一个问题,负载均衡可以绑定多个后端服务器. 一个后端服务器宕机后, ...

  2. nginx代理转发_学了三年的性能调优,你还不懂Nginx?怎么跳槽涨薪

    前言 根据 Netcraft 公布的最新的(2019年10月)Web 服务器调查报告,Nginx 的市场份额达到了 32.69%,毫无争议地成为了最流行的 Web 服务器.这主要得益于 Nginx 在 ...

  3. 浅谈Nginx性能调优

    女主宣言 Web服务性能调优是一项系统工程,涵盖许多方面,其中某一环节做的好并不能够保证整体性能好:但是如果某个环节做的不好,那么整体性能必然不会好. 可以调优的配置有很多,绝大多数情况下我们不需要追 ...

  4. Nginx性能调优,解决C10K问题

    公司的技术总监最近出了一道架构方面的问题让我们同组的开发人员设计,题目是这样的:有个签到功能,需要记录每个⽤户每年每⼀天的签到情况.假设⽤户量在千万,甚⾄亿级,该如何设计. 思考这个问题后,我给出的设 ...

  5. 肝了 15000 字性能调优系列专题(JVM、MySQL、Nginx and Tomcat),看不完先收藏

    前言 性能调优,无疑是个庞大的话题,也是很多项目中非常重要的一环,性能调优难做是众所周知的,毕竟性能调优涵盖的面实在是太多了,在这里我就大概的讲一下企业中最常用的四种调优--JVM 调优.MySQL ...

  6. apache服务器性能不行,Apache服务器性能调优

    文章目录 [隐藏] 工具 Apache mod_status Apache2Buddy 多处理模块 Prefork Worker Event 模块配置 StartServers MinSpareSer ...

  7. 让你眼前一亮的3. Tomcat 性能调优 (值得收藏)

    目录 3. Tomcat 性能调优3.1 Tomcat 性能测试3.2 Tomcat 性能优化3.2.1Tomcat配置调优1.禁用AJP连接2.Connector 连接器的选择3.Executor线 ...

  8. Ceph分布式存储(架构 配置与使用 原理 性能调优)

    Ceph分布式存储 Ceph分布式存储 1. Ceph概述 1.1 背景 1.2 介绍 1.3 特点 1.4 分布式存储系统横纵对比 2. Ceph架构设计 2.1 Ceph整体设计 2.2 逻辑架构 ...

  9. tomcat 性能调优

    tomcat 性能调优 *************** tomcat 调优 ServerProperties:server 配置,直接在配置文件(application.yml)中设置 @Config ...

最新文章

  1. 马斯克:“星链”卫星已能提供服务
  2. iphone-common-codes-ccteam源代码 CCUIAlertView.m
  3. python数据结构与算法(2)
  4. linux使用技巧:自动补全、常用快捷键* ? [] {}
  5. VTK:PolyData之RotationAroundLine
  6. JAVA-抽象类/类继承
  7. 第01课:中文自然语言处理的完整机器处理流程
  8. 面试题——20190717
  9. 在c语言中数据类型高低,C语言的数据类型
  10. 反射获取Class对象的三种方式
  11. window上mySQL以及其可视化工具的安装
  12. DIY 航模GPS (M8N+HMC5883L)
  13. 杭州电子科技大学acm--2005
  14. 家庭“好用”优化师:每一件好物都是在积攒生活闪光
  15. 目标检测评价指标:精确度mAP
  16. 精品基于PHP实现的剧影评|剧评影评系统
  17. 真c++ 从二叉树到红黑树(3)之二叉搜索树BST
  18. 奉劝大家不要再用刷流量软件刷新浪博客等级了
  19. TensorFlow学习笔记之 bmp格式、txt格式数据转换成tfrecord 格式
  20. iOS相册图片二维码识别

热门文章

  1. html阶梯统计,html,_有什么图表可以显示阶梯费率,html - phpStudy
  2. ORACLE——ROWNUM解析(使用ROWNUM大于条件,无法得到任何查询结果)
  3. 监控三个指标 并不代表你能监控Tuxedo
  4. 大学二年级各科的学习成绩
  5. 光线如何从宇宙黑暗时代逃逸:黑洞让宇宙变光明
  6. PL/SQL Developer Initialization erro
  7. PHP环境 PDOException PDOException: could not find driver
  8. (八)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训
  9. ADMT3.1快速迁移域用户账户和组[为企业维护windows server 2008系列十四]
  10. Linux 命令(81)—— chmod 命令