1. 程式人生 > 實用技巧 >nginx配置https伺服器

nginx配置https伺服器

目錄

nginx配置https伺服器

1. https配置引數

要配置 HTTPS 伺服器,必須在server配置塊中開啟SSL協議,還需要指定伺服器端證書和金鑰檔案的位置

伺服器證書是公開的,會被傳送到每一個連線到伺服器的客戶端。而私鑰不是公開的,需要存放在訪問受限的檔案中,當然,nginx主程序必須有讀取金鑰的許可權。私鑰和證書可以存放在同一個檔案中:

    ssl_certificate     www.example.com.cert;
    ssl_certificate_key www.example.com.cert;

這種情況下,證書檔案同樣得設定訪問限制。當然,雖然證書和金鑰存放在同一個檔案,只有證書會發送給客戶端,金鑰不會發送。

ssl_protocolsssl_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會話快取中,並由

SSL會話快取指令。一個兆位元組的快取包含大約4000個會話。預設的快取超時為5分鐘。可以通過使用SSL會話超時指令。下面是為具有10 MB共享會話快取的多核系統優化的示例配置:

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