在Web服務(wù)器上配置TLS / SSL
現(xiàn)在您已擁有 SSL 證書,您需要配置 Nginx Web 服務(wù)器以使用它。
我們將對配置進行一些調(diào)整:
- 我們將創(chuàng)建一個包含 SSL 密鑰和證書文件位置的配置代碼段。
- 我們將創(chuàng)建一個包含強 SSL 設(shè)置的配置代碼段,可以在將來與任何證書一起使用。
- 我們將調(diào)整 Nginx 配置文件以處理 SSL 請求并使用上面的兩個片段。
創(chuàng)建指向SSL密鑰和證書的配置代碼段
首先,讓我們在/etc/nginx/snippets目錄中創(chuàng)建一個新的Nginx配置代碼段。
為了正確區(qū)分此文件的目的,我們將其命名ssl-為我們的域名:
sudo nano /etc/nginx/snippets/ssl-example.com.conf
在這個文件中,我們只需要將ssl_certificate設(shè)置為我們的證書文件和ssl_certificate_key相關(guān)的密鑰。在我們的例子中,這將是這樣的:
ssl_certificate /home/root/domain.com/1_www.domain.com_bundle.crt;
ssl_certificate_key /home/root/domain.com/2_www.domain.com.key;
添加這些行后,保存并關(guān)閉該文件。
使用強加密設(shè)置創(chuàng)建配置代碼段
接下來,我們將創(chuàng)建另一個片段,用于定義一些SSL設(shè)置。這將使Nginx具有強大的SSL密碼套件,并啟用一些有助于保證我們的服務(wù)器安全的高級功能。
我們將為該文件指定一個通用名稱:
sudo nano /etc/nginx/snippets/ssl-params.conf
預(yù)加載HSTS可提高安全性,但如果意外啟用或啟用錯誤,可能會產(chǎn)生深遠的影響。在本教程中,我們不會預(yù)加載該設(shè)置,但如果您確定了解其含義,則可以對其進行修改:
# from https://cipherli.st/ # and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html ? ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # Disable preloading HSTS for now. You can use the commented out header line that includes # the "preload" directive if you understand the implications. #add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains"; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff;
完成后保存并關(guān)閉文件。
調(diào)整Nginx配置以使用SSL
現(xiàn)在我們已經(jīng)有了我們的代碼片段,我們可以調(diào)整我們的Nginx配置來啟用SSL。
我們將在本指南中假設(shè)您正在使用/etc/nginx/sites-available目錄中的defaultnginx配置文件。如果您使用的是其他nginx配置文件,請在以下命令中替換其名稱。
在我們繼續(xù)之前,讓我們備份當前的nginx配置文件:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
現(xiàn)在,打開nginx配置文件進行調(diào)整:
sudo nano /etc/nginx/sites-available/default
您的nginx配置文件可能像這樣:
server { listen 80 default_server; listen [::]:80 default_server; ? # SSL configuration ? # listen 443 ssl default_server; # listen [::]:443 ssl default_server;
我們將修改此配置,以便將未加密的HTTP請求自動重定向到加密的HTTPS。這為我們的網(wǎng)站提供了最佳安全性。如果要同時允許HTTP和HTTPS流量,請使用后面的備用配置。
我們將把配置分成兩個獨立的塊。在第一個listen指令之后,我們將添加一個server_name指令,設(shè)置為服務(wù)器的域名。然后,我們將設(shè)置重定向到我們將要創(chuàng)建的第二個nginx配置文件。之后,我們將關(guān)閉這個配置:
server { listen 80 default_server; listen [::]:80 default_server; server_name example.com www.example.com; return 301 https://$server_name$request_uri; }
接下來,我們需要在下面啟動一個新的nginx配置文件以。我們可以取消注釋listen使用端口443的兩個指令。之后,我們只需要在里面包含我們設(shè)置的兩個片段文件:
注意:您可能只有一個listen指令,其中包含default_server每個IP版本和端口組合的修飾符。如果為已設(shè)置default_server的這些端口啟用了其他nginx配置文件,則必須從其中一個塊中刪除修改器。
server { listen 80 default_server; listen [::]:80 default_server; server_name example.com www.example.com; return 301 https://$server_name$request_uri; } ? server { ? # SSL configuration ? listen 443 ssl default_server; listen [::]:443 ssl default_server; include snippets/ssl-example.com.conf; include snippets/ssl-params.conf; root /path/to/your/website/root
完成后保存并關(guān)閉文件。
測試
我們應(yīng)該檢查以確保我們的文件中沒有語法錯誤。我們可以通過輸入以下內(nèi)容來執(zhí)行
sudo nginx -t
如果一切順利,您將得到如下結(jié)果:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
最后,重啟服務(wù)器:
sudo systemctl restart nginx