nginx配置https伺服器
目錄
nginx配置https伺服器
1. https配置引數
要配置 HTTPS 伺服器,必須在server配置塊中開啟SSL協議,還需要指定伺服器端證書和金鑰檔案的位置
伺服器證書是公開的,會被傳送到每一個連線到伺服器的客戶端。而私鑰不是公開的,需要存放在訪問受限的檔案中,當然,nginx主程序必須有讀取金鑰的許可權。私鑰和證書可以存放在同一個檔案中:
ssl_certificate www.example.com.cert; ssl_certificate_key www.example.com.cert;
這種情況下,證書檔案同樣得設定訪問限制。當然,雖然證書和金鑰存放在同一個檔案,只有證書會發送給客戶端,金鑰不會發送。
ssl_protocols和ssl_ciphers指令可以用來強制使用者連線只能引入SSL/TLS那些強壯的協議版本和強大的加密演算法。從1.0.5版本開始,nginx預設使用“ssl_protocols SSLv3 TLSv1
”和“ssl_ciphers HIGH:!aNULL:!MD5
”,所以只有在之前的版本,明確地配置它們才是有意義的。從1.1.13和1.0.12版本開始,nginx預設使用“ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2
CBC模式的加密演算法容易受到一些攻擊,尤其是BEAST攻擊(參見CVE-2011-3389)。可以通過下面配置調整為優先使用RC4-SHA加密演算法:
ssl_ciphers RC4:HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on;
優化引數:
SSL操作佔用額外的CPU資源。多處理器系統工人過程應該執行,不少於可用CPU核心的數量。最密集的CPU操作是SSL握手.有兩種方法可以最大限度地減少每個客戶端的這些運算元:第一種方法是啟用保活連線通過一個連線傳送多個請求,第二個連線是重用SSL會話引數,以避免對並行連線和後續連線進行SSL握手。會話儲存在工作人員共享的ssl會話快取中,並由
worker_processes auto; http { ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; server { listen 443 ssl; server_name www.example.com; keepalive_timeout 70; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ...
預設配置:
server {
listen 443 ssl;
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
2. 配置https伺服器
環境說明
系統 | IP | 安裝環境 |
---|---|---|
centos7 | 192.168.32.125 | lnmp |
已關閉防火牆和selinux,並配置好了yum源,包括epel源
#證書位置
[root@www ~]# ls /usr/local/nginx/ssl/
www.test.com.crt www.test.com.key
#配置https,取消註釋,修改相關配置引數
[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
......
# HTTPS server
server {
listen 443 ssl;
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
......
訪問測試
3. 配置http/https伺服器
配置一臺同時處理HTTP和HTTPS請求的伺服器:
[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
......
server {
listen 80;
listen 443 ssl;
server_name www.test.com;
ssl_certificate /usr/local/nginx/ssl/www.test.com.crt;
ssl_certificate_key /usr/local/nginx/ssl/www.test.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
......
[root@www ~]# nginx -s reload