nginx下配置ssl本來是很簡單的,無論是去認證中心買SSL安全證書還是自簽署證書,但最近公司OA的一個需求,得以有個機會實際折騰一番。一開始采用的是全站加密,所有訪問http:80的請求強制轉換(rewrite)到https,后來自動化測試結果說響應速度太慢,https比http慢慢30倍,心想怎么可能,鬼知道他們怎么測的。所以就試了一下部分頁面https(不能只針對某類動態請求才加密)和雙向認證。下面分節介紹。
默認nginx是沒有安裝ssl模塊的,需要編譯安裝nginx時加入--with-http_ssl_module選項。
關于SSL/TLS原理請參考 這里,如果你只是想測試或者自簽發ssl證書,參考 這里 。
提示:nignx到后端服務器由于一般是內網,所以不加密。
1. 全站ssl
全站做ssl是最常見的一個使用場景,默認端口443,而且一般是單向認證。
server { listen 443; server_name example.com; root /apps/www; index index.html index.htm; ssl on; ssl_certificate ../SSL/ittest.pem; ssl_certificate_key ../SSL/ittest.key;# ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;# ssl_prefer_server_ciphers on;}
如果想把http的請求強制轉到https的話:
server { listen 80; server_name example.me; rewrite ^ https://$server_name$request_uri? permanent;### 使用return的效率會更高 # return 301 https://$server_name$request_uri;}
ssl_certificate
證書其實是個公鑰,它會被發送到連接服務器的每個客戶端,ssl_certificate_key
私鑰是用來解密的,所以它的權限要得到保護但nginx的主進程能夠讀取。當然私鑰和證書可以放在一個證書文件中,這種方式也只有公鑰證書才發送到client。
ssl_protocols
新聞熱點
疑難解答