對(duì)Nginx支持SSL的性能進(jìn)行優(yōu)化的方法
這篇文章是講web服務(wù)器方面的性能調(diào)整. 不包括數(shù)據(jù)庫(kù)性能的調(diào)整.
初始化服務(wù)器
這個(gè)web服務(wù)器運(yùn)行在一個(gè)EC2 t1.micro 環(huán)境.我選擇 Nginx + PHP5-FPM 來(lái)運(yùn)行php頁(yè)面,出于安全考慮我使用SSL.
測(cè)試性能
我使用Blitz.io來(lái)進(jìn)行壓力和性能測(cè)試. 下面的是我壓力測(cè)試的命令. 功能是在60秒內(nèi)逐漸增加用戶. 在整個(gè)過(guò)程中,Blitz.io 每秒創(chuàng)建一個(gè)請(qǐng)求并增加4個(gè)用戶(rise/run = 260/60).
詳細(xì)的解釋
對(duì)于愛(ài)好者來(lái)說(shuō),這里是詳細(xì)的解釋。我將會(huì)在下述章節(jié)帶領(lǐng)你重溫我的思考過(guò)程。
如果編輯了Nginx配置,那么重啟Nginx服務(wù)器。如果編輯了PHP5-FPM配置,那么重啟服務(wù)。
嘗試 #1: 增強(qiáng)硬件
對(duì)于改善性能,我本能的想法是增強(qiáng)服務(wù)器硬件,希望一切都會(huì)正常工作。我將EC2實(shí)例從t1.micro升級(jí)到了c1.medium(針對(duì)高流量服務(wù)器進(jìn)行了優(yōu)化,而不是通用服務(wù)器)。
在此之后,我運(yùn)行了Blitz.io負(fù)載測(cè)試。這是結(jié)果的截圖

服務(wù)器的峰值性能可以達(dá)到每秒50個(gè)成功命中。隨著負(fù)載的繼續(xù)增加,超時(shí)的數(shù)量上升,而命中的數(shù)量下降。
嘗試 #2: 評(píng)效CPU性能
我重新執(zhí)行了測(cè)試,同時(shí)在后臺(tái)運(yùn)行htop。我注意到兩個(gè)CPU的利用率不超過(guò)13%。內(nèi)存使用了300Mb。看起來(lái)服務(wù)器沒(méi)有充分利用。所以我做了下述改變。我編輯了/etc/ngnix/nginx.conf
嘗試 #3, #4, #5: 微調(diào) Nginx + PHP5-FPM
在下述嘗試中,我改變了下述值,仍然獲得跟嘗試 #1同樣的結(jié)果。
嘗試 #3
worker_processes 2;
events {
worker_connections 19000;
multi_accept on;
}
...
_________
嘗試 #4
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
我沒(méi)有取消嘗試 #4的改變
pm.max_children = 160
pm.start_servers = 24
pm.min_spare_servers = 20
pm.max_spare_servers = 35
pm.max_requests = 1500
嘗試 #6: 部署另外一臺(tái)服務(wù)器
我還有另外一臺(tái)Linode服務(wù)器。具有1.5Gb的內(nèi)存和8個(gè)CPU。我復(fù)制所有Nginx和PHP5-FPM的設(shè)置到這臺(tái)服務(wù)器上。
這是我使用Blitz.io進(jìn)行壓力測(cè)試的命令
這是結(jié)果:

Linode服務(wù)器非常棒!我在想“Linode比EC2好么?”。在我決定沿著這條思路走下去,將代碼遷移到Linode之前,我想要確保兩臺(tái)服務(wù)器之間沒(méi)有差別。
嘗試 #7: 大啟示
我搜索了一下,發(fā)現(xiàn)Nginx有些SSL相關(guān)的問(wèn)題。默認(rèn)Nginx使用DHE算法創(chuàng)建密碼(cipher)。禁用該算法將會(huì)提升性能。
所有我編輯/etc/nginx/nginx.conf去掉了kEDH密碼算法。
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;
…
}
...
我重現(xiàn)執(zhí)行了原來(lái)的壓力測(cè)試:
這是結(jié)果:

真的有效?。。。?/p>
嘗試 #8: 我真的需要增強(qiáng)硬件
太棒了,EC2與Linode在性能上很接近。但是我真的需要c1.medium實(shí)例來(lái)獲得這種性能么?可能不需要... 所以我將EC2的實(shí)例類型改回了t1.micro。
I因?yàn)閙icro實(shí)例只有一個(gè)CPU,所有我在/etc/nginx/nginx.conf中減少了worker_processes。
...
這是結(jié)果:

嗯,額外的硬件是有幫助的。
結(jié)論
想要在使用了SSL的Nginx服務(wù)器上獲得最好的性能,如下操作:
- - 默認(rèn)使用的DH算法是低性能的最大原因。改變SSL密碼設(shè)置如下:
- - 升級(jí)EC2從t1.micro到c1.medium
- - 因?yàn)閏1.medium有兩個(gè)CPUs,所有設(shè)置Nginx有兩個(gè)工作進(jìn)程。
- Nginx 下配置SSL證書的方法
- Nginx服務(wù)器中關(guān)于SSL的安全配置詳解
- 在Nginx服務(wù)器中啟用SSL的配置方法
- nginx配置ssl雙向驗(yàn)證的方法
- Linux下Nginx安全證書ssl配置方法
- Nginx+SSL+Node.js運(yùn)行環(huán)境配置教程
- Nginx服務(wù)器的SSL證書配置以及對(duì)SSL的反向代理配置
- Nginx啟動(dòng)SSL功能,并進(jìn)行功能優(yōu)化詳細(xì)介紹
- 針對(duì)OpenSSL安全漏洞調(diào)整Nginx服務(wù)器的方法
- Nginx配置SSL證書監(jiān)聽(tīng)443端口
相關(guān)文章
nginx代理轉(zhuǎn)發(fā)報(bào)錯(cuò)405?Method?Not?Allowed解決
這篇文章主要為大家介紹了解決nginx代理轉(zhuǎn)發(fā)報(bào)錯(cuò)405?Method?Not?Allowed解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
nginx centos 服務(wù)開機(jī)啟動(dòng)設(shè)置實(shí)例詳解
這篇文章主要介紹了nginx centos 服務(wù)開機(jī)啟動(dòng)設(shè)置實(shí)例詳解的相關(guān)資料,這里對(duì)服務(wù)開機(jī)啟動(dòng)做了詳細(xì)的步驟介紹,需要的朋友可以參考下2016-11-11
在Nginx中使用X-Sendfile頭提升PHP文件下載的性能(針對(duì)大文件下載)
這篇文章主要介紹了在Nginx中使用X-Sendfile頭提升PHP文件下載的性能,可以用在針對(duì)大文件下載的情況,下載非網(wǎng)站W(wǎng)eb目錄文件的需求,提供下載權(quán)限控制的場(chǎng)景,需要的朋友可以參考下2014-07-07
Nginx實(shí)現(xiàn)異步訪問(wèn)mysql的配置方法
這篇文章主要介紹了Nginx實(shí)現(xiàn)異步訪問(wèn)mysql的配置方法,本文先是講解了安裝配置方法,然后給出了使用方法,需要的朋友可以參考下2015-06-06
Nginx中虛擬主機(jī)與指定訪問(wèn)路徑的設(shè)置方法講解
這篇文章主要介紹了Nginx中虛擬主機(jī)與指定訪問(wèn)路徑的設(shè)置方法講解,也是在同一個(gè)Nginx程序中部署多個(gè)站點(diǎn)的基本方法,需要的朋友可以參考下2016-03-03

