对Nginx支持SSL的性能进行优化的方法_nginx

这篇文章是讲web服务器方面的性能调整. 不包括数据库性能的调整.
初始化服务器

这个web服务器运行在一个EC2 t1.micro 环境.我选择 Nginx + PHP5-FPM 来运行php页面,出于安全考虑我使用SSL.
测试性能

我使用Blitz.io来进行压力和性能测试. 下面的是我压力测试的命令. 功能是在60秒内逐渐增加用户. 在整个过程中,Blitz.io 每秒创建一个请求并增加4个用户(rise/run = 260/60).

复制代码 代码如下:

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

详细的解释

对于爱好者来说,这里是详细的解释。我将会在下述章节带领你重温我的思考过程。
如果编辑了Nginx配置,那么重启Nginx服务器。如果编辑了PHP5-FPM配置,那么重启服务。

尝试 #1: 增强硬件

对于改善性能,我本能的想法是增强服务器硬件,希望一切都会正常工作。我将EC2实例从t1.micro升级到了c1.medium(针对高流量服务器进行了优化,而不是通用服务器)。

在此之后,我运行了Blitz.io负载测试。这是结果的截图

 服务器的峰值性能可以达到每秒50个成功命中。随着负载的继续增加,超时的数量上升,而命中的数量下降。

尝试 #2: 评效CPU性能

我重新执行了测试,同时在后台运行htop。我注意到两个CPU的利用率不超过13%。内存使用了300Mb。看起来服务器没有充分利用。所以我做了下述改变。我编辑了/etc/ngnix/nginx.conf

复制代码 代码如下:

worker_processes 2;

尝试 #3, #4, #5: 微调 Nginx + PHP5-FPM

在下述尝试中,我改变了下述值,仍然获得跟尝试 #1同样的结果。

尝试 #3

复制代码 代码如下:

/etc/ngnix/nginx.conf

worker_processes 2;
events {
worker_connections 19000;
multi_accept on;
}
...

_________

尝试 #4

复制代码 代码如下:

/etc/ngnix/nginx.conf

worker_processes 2;
events {
  worker_connections 19000;
  multi_accept on;
}
http {
  gzip on;
  gzip_disable "msie6";

  gzip_min_length  1000;
  gzip_proxied     expired no-cache no-store private auth;
  gzip_types       text/plain application/xml application/javascript text/css application/x-javascript;

}
...

________

尝试 #5
我没有取消尝试 #4的改变

复制代码 代码如下:

/etc/php5/fpm/pool.d/www.conf

pm.max_children = 160
pm.start_servers = 24
pm.min_spare_servers = 20
pm.max_spare_servers = 35
pm.max_requests = 1500

尝试 #6: 部署另外一台服务器

我还有另外一台Linode服务器。具有1.5Gb的内存和8个CPU。我复制所有Nginx和PHP5-FPM的设置到这台服务器上。

这是我使用Blitz.io进行压力测试的命令

复制代码 代码如下:

-p 1-250:60 http://labs.mydomian2.com

这是结果:

 Linode服务器非常棒!我在想“Linode比EC2好么?”。在我决定沿着这条思路走下去,将代码迁移到Linode之前,我想要确保两台服务器之间没有差别。

尝试 #7: 大启示

我搜索了一下,发现Nginx有些SSL相关的问题。默认Nginx使用DHE算法创建密码(cipher)。禁用该算法将会提升性能。

所有我编辑/etc/nginx/nginx.conf去掉了kEDH密码算法。

复制代码 代码如下:

worker_processes 2;
events {
  worker_connections 1024;
}
http {
  gzip on;
  gzip_disable "msie6";

  gzip_min_length  1000;
  gzip_proxied     expired no-cache no-store private auth;
  gzip_types       text/plain application/xml application/javascript text/css application/x-javascript;
  ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; 

}
...

我重现执行了原来的压力测试:

复制代码 代码如下:

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

这是结果:

 真的有效!!!!

尝试 #8: 我真的需要增强硬件

太棒了,EC2与Linode在性能上很接近。但是我真的需要c1.medium实例来获得这种性能么?可能不需要... 所以我将EC2的实例类型改回了t1.micro。

I因为micro实例只有一个CPU,所有我在/etc/nginx/nginx.conf中减少了worker_processes。

复制代码 代码如下:

worker_processes 1;
...

这是结果:

 嗯,额外的硬件是有帮助的。
结论

想要在使用了SSL的Nginx服务器上获得最好的性能,如下操作:

  •     - 默认使用的DH算法是低性能的最大原因。改变SSL密码设置如下:

复制代码 代码如下:

    ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

  •     - 升级EC2从t1.micro到c1.medium
  •     - 因为c1.medium有两个CPUs,所有设置Nginx有两个工作进程。
时间: 2024-07-30 23:17:17

对Nginx支持SSL的性能进行优化的方法_nginx的相关文章

Nginx 配置SSL 证书 + 搭建 HTTPS网站的方法

一.HTTPS 是什么? 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定.HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输.HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混. HTTPS 目前已经是所有注重隐私和安全的网站的首选,随着技术的不断发展,HTTPS 网站已不再是

Nginx配置编写时支持逻辑运算与大小写字母转换的方法_nginx

逻辑运算nginx的配置中不支持if条件的逻辑与&& 逻辑或|| 运算 ,而且不支持if的嵌套语法,否则会报下面的错误:nginx: [emerg] invalid condition. 我们可以用变量的方式来间接实现. 要实现的语句: if ($arg_unitid = 42012 && $uri ~/thumb/){ echo "www.jb51.net"; } 如果按照这样来配置,就会报nginx: [emerg] invalid conditio

ECMall支持SSL连接邮件服务器的配置方法详解_php实例

首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接. 然后,得对相应代码做一定调整. 1. 覆盖phpmailer 请从附件进行下载: 复制代码 代码如下: http://cywl.jb51.net:81/201405/yuanma/ecmall_phpmailer_lib(jb51.net).zip 2. 改造lib 涉及到两个lib:mail.lib.php .mail_quequ.lib.php 在这两个类的构造函数中,增加一个参数传递.如Mailer 复制代码 代码

nginx中文件下载指定保存文件名的配置方法_nginx

一般在我们上传完资源文件之后,为了避免文件名冲突,会将文件名改成毫无意义的一段字符.这个字符,可能是MD5产生的,或者是其他方式产生的字符串.这时候,下载的时候,默认保存的文件名会是这段毫无意义的文件名(图1). 其实,nginx是支持下载时重命名的,让文件名更加友好. nginx也很容易配置:只要加入以下几行即可: 复制代码 代码如下: location ~* .*\.(doc|txt|jar|zip|apk)(\?.*)?$ {         if ($request_uri ~* ^.*

简介使用Nginx Plus的在线活动监控功能的方法_nginx

想了解你的 NGINX 服务器现在是什么情况? 是被 DoS 攻击, 还是网站出现一堆错误? NGINX Plus 现在推出一个时实活动监视接口,提供关键负载(key load )和性能监控. 通过简单的 RESTful JSON 接口,连接实时监控统计数据(stats to live dashboards) 和第三方监控工具,都变得轻轻松松. NGINX Plus 的 平衡负载状态时实监控 细节: 在线活动监控 – JSON feed 在NGINX Plus中启用该状态提示,只需简单地在服务器

详解Nginx与Apache共用80端口的配置方法_nginx

一个典型的 Nginx + Apache 应用方案可以是Nginx 占用 80 端口,过滤静态请求,然后动态请求即 Proxy 到 Apache 的 8080 端口.Proxy 反向代理的好处是访问的时候,始终就是 80 端口,来访者不会觉察到有任何的区别. 但有的应用确非常"聪明",识别到 Apache 所位于的端口是 8080 ,就会把相关的超链接都一并加上 :8080 的后续.这么就死定了,还能有正常访问麽?! 有个方法可以解决这事,就是把 apache 也运行在80端口上.同一

Nginx HTTP:413 Request Entity Too Large解决方法_nginx

概述 今天遇到一个问题,在PHP程序中上传图片出现了以下错误:HTTP:413 Request Entity Too Large. 开发环境:CentOS + Nginx + PHP + MySql 解决方案 解决此问题,根据上传数据文件的大小,需要调节PHP和Nginx相关的参数配置. 配置PHP PHP默认上传文件大小限制为2M,如果超出2M你需要修改PHP配置文件php.ini里面的参数. 复制代码 代码如下: post_max_size = 8M (表单提交的最大限制,此项不是限制上传单

为Nginx自定义404,502错误页面的方法_nginx

首先打开nginx.conf文件,在fastcgi_temp_file_write_size 128k; 下面添加 fastcgi_intercept_errors on;注意,包括;号 然后在需要定义的站点的里面添加 error_page 404 = /404.htm;例如: 复制代码 代码如下: server { listen 80; server_name www.deepvps.com; index index.html index.htm index.php; error_page 4

Nginx限制IP并发数与下载速度的方法_nginx

在Nginx服务器上进行一些常规设置,来限制其并发数及会话空间等. nginx限制ip并发数,也是说限制同一个ip同时连接服务器的数量 1,添加limit_zone 这个变量只能在http使用  代码示例: 复制代码 代码如下: vi /usr/local/nginx/conf/nginx.conflimit_zone one $remote_addr 10m; 2,添加limit_conn 这个变量可以在http, server, location使用只限制一个站点,所以添加到server里面