nginx配置ssl支持https的詳細步驟
文章概要:在建站的時候我們通常要讓網站通過https進行訪問,不然使用http過程中,所有信息都是未加密的,并且用戶訪問的時候瀏覽器會屏蔽我們的網站。本文介紹如何通過nginx配置ssl以支持通過https協(xié)議訪問網站。
本文內容來自:谷流倉AI - ai.guliucang.com
一、修改nginx配置文件
- 打開nginx.conf配置文件,修改需要添加支持ssl的server塊,比如
http {
server {
listen 443 ssl; # https默認為443端口,當然也可以用任何端口。后面ssl用于告訴Nginx在指定的端口上啟用SSL/TLS加密
server_name example.com; # 你網站的域名
# 下面輸入證書和私鑰的地址(詳細解釋看下文的注釋1)
ssl_certificate certs/my_cert.crt; # 證書(查看注釋2)
ssl_certificate_key certs/my_cert.key; # 證書對應的私鑰文件(查看注釋3)
ssl_session_cache shared:SSL:1m; # 可選配置,設置了 SSL 會話緩存的類型和大小。(具體查看注釋5)
ssl_session_timeout 5m; # 可選配置,設置了 SSL 會話緩存的超時時間為 5 分鐘。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 可選配置, 指定了 SSL/TLS 握手過程中允許使用的加密算法的優(yōu)先級順序。(具體查看注釋7)
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # 可選配置,指定了允許使用的 SSL/TLS 協(xié)議版本。(具體查看注釋8)
ssl_prefer_server_ciphers on; # 可選配置(具體查看注釋9)
}
}
- 修改保存了上面的配置文件之后,使用
nginx -t
驗證一下配置文件是否正確配置。 - 提示syntax ok之后,就可以用
nginx -s reload
重載配置,使配置立即生效。
二、驗證
通過https訪問上面配置好的網站,可以在瀏覽器地址欄左側的鎖圖標點開看看是否顯示證書是安全的了。
三、(可選)HTTP重定向到HTTPS
如果希望將所有HTTP請求重定向到HTTPS,可以添加以下配置:
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
保存修改之后,nginx -s reload
重載配置文件即可。
相關注釋
-
ssl證書:
- 有免費的有也收費的,沒錢的用免費的就行了, 比如Let’s Encrypt。
- 如何下載證書?
- 可以去阿里云的
數字證書
頁面獲取,可以申請20個免費的DigitCert證書 - Let’s Encrypt的可以安裝certbot自動化下載證書還可以自動續(xù)期
- 可以去阿里云的
- Let’s Encrypt如何通過certbot下載證書?
-
centos中通過yum安裝certbot:
yum install certbot -y
-
簽發(fā)下載泛域名證書
*.example.com
(這樣所有子域名也可以用):certbot certonly -d "*.example.com" -d example.com --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
, 其中--preferred-challenges dns-01
表示通過dns的方式驗證自己對網站的所有權。比如我的域名解析服務是阿里云提供的,按照certbot的要求,去阿里云的云解析界面添加一個指定的TXT類域名解析就行了。 -
簽發(fā)成功后給出如下提示
Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your certificate will expire on 2024-06-16. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew"
-
之后快要過期之前通過
certbot renew
即可簽發(fā)新的證書。
-
- 證書有效期?
- 免費的證書目前一般只有3個月有效期,到期之前需要重新簽發(fā)新的證書
- 證書還沒過期,直接新申請一個證書,舊的證書會立即失效嗎?
- 不會。舊證書的過期時間是固定的,不會因為申請了新證書而提前失效。除非你直接把舊的證書從服務器上刪掉了。
- 可以在在過期前提前申請好一個新的證書,新的證書不會影響舊的證書。然后過期前把新的證書放到服務器替換掉舊的證書,并
nginx -s reload
重載配置就行了。
-
關于ssl_certificate
- 證書文件包含服務器的公鑰、服務器信息以及證書頒發(fā)機構(CA)的數字簽名。
- 證書文件用于向客戶端證明服務器的身份,并提供服務器的公鑰。
- 可以是
.pem
格式的文件,也可以是.crt
格式的文件(詳情查看注釋4)
-
關于ssl_certificate_key
- 私鑰文件包含與證書文件中公鑰相對應的私鑰。
- 私鑰用于對數據進行解密和簽名操作,必須嚴格保密。
- 可以是
.pem
格式的文件,也可以是.key
格式的文件
-
pem文件和crt文件有啥區(qū)別,都能用嗎?
- SSL證書的PEM和CRT格式都是用于存儲SSL/TLS證書的文件格式,它們之間有一些區(qū)別,但在大多數情況下可以互換使用。
- PEM(Privacy Enhanced Mail)格式是一種基于Base64編碼的文件格式,以
-----BEGIN CERTIFICATE-----
開頭,以-----END CERTIFICATE-----
結尾。PEM文件可以包含證書、私鑰或者公鑰。PEM格式的文件可以用于存儲SSL/TLS證書、私鑰和公鑰。 - CRT(Certificate)格式與PEM格式類似,也是基于Base64編碼,但通常只包含證書本身,不包含私鑰。CRT格式的文件通常只用于存儲SSL/TLS證書。
- 如果你有一個包含證書和私鑰的PEM文件,可以直接在Nginx配置中使用該文件。以Let’s Encrypt簽發(fā)的證書為例,ssl_certificate填
/path/to/fullchain.pem
和ssl_certificate_key填對應私鑰地址/path/to/privkey.pem
- 如果你有單獨的CRT證書文件和私鑰文件,需要在Nginx配置中分別指定證書文件和私鑰文件的路徑。
-
ssl_session_cache
- 這個配置設置了 SSL 會話緩存的類型和大小。
-
shared
表示在所有工作進程之間共享緩存。 -
SSL
是緩存的名稱。 -
1m
表示緩存的最大大小為 1 兆字節(jié)。 - 啟用 SSL 會話緩存可以提高性能,因為它允許客戶端在后續(xù)連接中重用之前協(xié)商的會話參數,避免了重新進行完整的 SSL/TLS 握手過程。
-
ssl_session_timeout
- 這個配置設置了 SSL 會話緩存的超時時間為 5 分鐘。
-
ssl_ciphers
- 這個配置指定了 SSL/TLS 握手過程中允許使用的加密算法的優(yōu)先級順序。
- 它使用了一個加密算法的列表,按照優(yōu)先級從高到低排列。
- 建議使用安全性較高的加密算法,并禁用一些不安全的算法(如 NULL、aNULL、MD5、ADH、RC4 等)。
-
ssl_protocols
- 指定了允許使用的 SSL/TLS 協(xié)議版本。
- 建議只啟用安全的協(xié)議版本,如 TLSv1.1、TLSv1.2 和 TLSv1.3,禁用不安全的 SSL v2 和 SSL v3。
-
ssl_prefer_server_ciphers
- 這個配置指定了在 SSL/TLS 握手過程中,優(yōu)先使用服務器端指定的加密算法,而不是客戶端提供的加密算法。
- 這樣可以確保使用更安全的加密算法。
-
同一個域名不同端口,可以用同一個SSL證書嗎?
- 可以。SSL證書是基于域名頒發(fā)的,而不是基于端口號。
- 例如,假設你有一個域名為example.com的網站,并且你在nginx.conf中配置了多個服務器塊,分別監(jiān)聽不同的端口:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
...
}
server {
listen 8443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
...
}
在上面的示例中,兩個服務器塊都使用相同的SSL證書(certificate.crt)和私鑰(private.key),盡管它們監(jiān)聽不同的端口(443和8443)。文章來源:http://www.zghlxwxcb.cn/news/detail-844091.html
當客戶端通過不同的端口訪問你的網站時,例如https://example.com或https://example.com:8443,Nginx將使用相同的SSL證書來建立安全連接,因為證書是基于域名example.com頒發(fā)的。文章來源地址http://www.zghlxwxcb.cn/news/detail-844091.html
到了這里,關于nginx配置ssl支持https的詳細步驟的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!