對 Nginx SSL 的效能進行調整
這篇文章是講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
結論
對於那些不想看完全文的下面是幾個方案。
-
- 這個預設的 DH演算法是效能低的最大原因。 改變你的 SSL 密碼設定用下面的這個命令:
ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+SSLv2:+EXP;
- - 升級你的EC2 從t1。micro 到 c1。medium
- - 當c1。medium給你兩個CPU時,設定Nginx使用2個工作程式。
詳細的解釋
對於愛好者來說,這裡是詳細的解釋。我將會在下述章節帶領你重溫我的思考過程。
如果編輯了Nginx配置,那麼重啟Nginx伺服器。如果編輯了PHP5-FPM配置,那麼重啟服務。
目錄
嘗試 #1: 增強硬體
嘗試 #2: 評效CPU效能
嘗試 #3, #4, #5: 微調Nginx + PHP5-FPM
嘗試 #6: 部署另外一臺伺服器
嘗試 #7: 大啟示
嘗試 #8: 我真的需要增強硬體
嘗試 #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)。禁用該演算法將會提升效能。
這是我讀到的文章:
http://matt。io/entry/ur
http://auxbuss。com/blog/posts/2011_06_28_ssl_session_caching_on_nginx/
所有我編輯/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有兩個工作程式。
相關文章
- 用sysctl進行調整Linux系統效能Linux
- 谷歌對移動演算法進行空前的調整谷歌演算法
- Nginx調整(一)Nginx
- Oracle效能調整之--DML語句效能調整Oracle
- 對AngularJS進行效能調優的7個建議AngularJS
- Nginx的優化調整方面Nginx優化
- 用 matlab 對圖片進行對比度和均衡度調整Matlab
- oracle 效能調整Oracle
- 在ORACLE中對線上重做日誌檔案進行調整Oracle
- Nginx 效能調優Nginx
- 用於效能調整的動態效能檢視——效能調整手冊和參考
- oracle效能調整(1)Oracle
- oracle效能調整(2)Oracle
- ORACLE效能調整--1Oracle
- ORACLE效能調整---2Oracle
- Oracle 效能調整for HWOracle
- (zt)Oracle效能調整Oracle
- oracle效能調整2Oracle
- Oracle效能調整的誤區Oracle
- 使用VisualVM對JAVA程式進行效能分析及調優LVMJava
- 調整PHP-FPM(Nginx)的子程式PHPNginx
- 【效能調整】海量資料的效能設計
- Oracle效能最佳化調整--調整重做機制Oracle
- 網路調整——效能調整手冊和參考
- ORACLE sql 語句的執行過程(SQL效能調整)OracleSQL
- oracle資料庫的效能調整Oracle資料庫
- Oracle效能調整筆記Oracle筆記
- 【效能調整】等待事件(一)事件
- 【效能調整】等待事件(二)事件
- Oracle效能調整-1(轉)Oracle
- Oracle效能調整-2(轉)Oracle
- Oracle效能調整-3(轉)Oracle
- 如何對分散式 NewSQL 資料庫 TiDB 進行效能調優分散式SQL資料庫TiDB
- 淺談Nginx效能調優Nginx
- 為最佳效能調優 NginxNginx
- oracle 通過statspace 進行效能調優Oracle
- 時區調整對job的執行時間的影響
- oracle資料庫的效能調整(轉)Oracle資料庫