記錄---圖文并茂講解nginx中http升級https(部署SSL證書)知識點總結
????? 寫在開頭
點贊 + 收藏 === 學會??????
為何網站要升級為https
原因有以下幾點:
1. 避免瀏覽器的不安全的警告
- 瀏覽器對于http的網站會在地址欄明確標記【不安全】字樣
- 這樣直接降低用戶對網站的信任度
- 造成用戶流失
- 甚至可能被用戶誤認為是釣魚網站
- 如下圖,是筆者的網站沒有升級https證書的時候的樣子

升級后的

2. 加密傳輸數據,防止數據泄露
- 這樣理解,如果我們使用的是http的話,連接了一家咖啡廳的WiFi
- 而后執行登錄操作,比如輸入用戶名密碼:admin/admin123
- 輸入了以后,黑客就能通過工具抓包,看到我們的請求參數的用戶名和密碼
- 于是,黑客就拿到了我們的用戶名和密碼...
- 實際上,除了能看到以外,甚至還能夠修改我們的提交數據之類的
- ssl證書通過非對稱加密和對稱加密,先驗證身份,再用專屬鑰匙加密數據
- 這樣,黑客就沒辦法了
SSL 證書通過加密用戶與網站之間的通信(如用戶輸入的信息、瀏覽行為等)防止數據在傳輸過程中被黑客竊取或篡改。即使是個人網站,若涉及用戶留言、登錄(如后臺管理)、簡單表單提交等,HTTPS 能避免數據泄露風險。
3. https擁有攝像頭、麥克風、地理位置權限
- 若是http網站調用攝像頭/麥克風,瀏覽器會直接拒絕
- 類似的,調用定位地理位置api,瀏覽器也會會彈出警告,甚至拒絕
4. 有利于SEO搜索引擎優化
- 搜索引擎大廠,比如谷歌、百度優先https網站,排名更高
- 另外,也會降低http網站的權重,從而影響網站的流量
- 另外,HTTP/2、CDN 加速等,也嚴格要求使用https
如何獲取ssl
免費的 Let's Encrypt
Let's Encrypt:letsencrypt.org/zh-cn/
- Let's Encrypt提供免費的SSL證書
- 主流瀏覽器都支持
- 缺點就是證書有效期只有90天
- 需要每三個月手動更新一次
付費的云服務器供應商提供
- 付費ssl證書也不貴,普通的也就幾十塊錢一年

nginx代碼控制
下載nginx證書
比如,筆者在騰訊云后臺下載對應的ssl證書

下載好以后,解壓能得到四個文件

這四個文件分別是:
-
ashuai.work.csr——部署時不需要- csr后綴全稱:Certificate Signing Request(證書簽名請求)
- 作用:這是我們在申請證書時生成的一個請求文件,包含了我們公鑰和域名等信息,提交給 CA(騰訊云)用于簽發證書。
-
ashuai.work.key——部署時需需要- 全稱:Private Key(私鑰)
- 作用:這是生成 CSR 時同時產生的私鑰,非常關鍵,必須保密,不能泄露。
-
ashuai.work_bundle.crt——部署時需需要- 作用:這是證書鏈文件,包含了我們的域名證書 + 中間 CA 證書(有時也包括根證書),用于建立信任鏈。
-
ashuai.work_bundle.pem——部署時不需要- 作用:和
.crt文件內容基本相同,只是擴展名不同。.pem是一種通用的證書編碼格式(Base64 PEM 編碼),很多系統都支持。 - 就是備用的.crt文件
- 作用:和
在nginx.conf文件同級目錄下,新建文件夾存放證書文件
比如,筆者在服務器上的對應目錄,新建一個名為cert的文件夾,用于存放證書文件

在nginx.conf寫入使用證書的語法
而后,在ngixn.conf文件內,把剛剛的證書文件,引入進來,并做如下配置
# SSL 配置 ssl_certificate cert/ashuai.work_bundle.crt; # 證書文件路徑 ssl_certificate_key cert/ashuai.work.key; # 私鑰文件路徑 ssl_session_timeout 5m; # 會話超時時間為 5 分鐘 ssl_protocols TLSv1.2 TLSv1.3; # 使用的協議 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # HIGH:!aNULL:!MD5; # 加密套件 ssl_prefer_server_ciphers on; # 讓服務器優先選擇自己支持的加密套件
注意,這里的cert/ashuai.work_bundle.crt; # 證書文件路徑 的 cert/xxx.crt表示同級目錄,去找和nginx.conf同級目錄的ashuai.work_bundle.crt這個文件
圖示:

80端口重定向到443、監聽443端口,并禁用ip訪問
# 80端口的請求全部重定向到443端口
server {
listen 80;
server_name ashuai.work;
return 301 https://$host:$server_port$request_uri;
}
#"兜底"配置,用于捕獲所有未明確匹配其他server塊的HTTPS請求(包括通過IP訪問或非法域名)
server {
listen 443 default_server ssl; # ← 核心配置
server_name _;
return 403;
}
server {
listen 443 ssl; # 監聽443端口并啟用SSL
server_name ashuai.work;
# add_header X-Frame-Options SANEORIGIN;#DENY
# add_header 'Referrer-Policy' 'no-referrer'
add_header 'Referrer-Policy' 'origin';
location / {
......
}
}
把原先的http的請求,轉發到https
得通過497的方式,nginx才會把http的請求,轉發到https
http {
include mime.types;
......
# SSL 配置
ssl_certificate cert/ashuai.work_bundle.crt; # 證書文件路徑
ssl_certificate_key cert/ashuai.work.key; # 私鑰文件路徑
ssl_session_timeout 5m; # 會話超時時間為 5 分鐘
ssl_protocols TLSv1.2 TLSv1.3; # 使用的協議
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # HIGH:!aNULL:!MD5; # 加密套件
ssl_prefer_server_ciphers on; # 讓服務器優先選擇自己支持的加密套件
# 引入同級目錄下的conf.d文件夾的所有的以.conf結尾的server配置
include conf.d/*.conf;
# 如果訪問的是 HTTP,自動返回 497 并重定向到 HTTPS
error_page 497 https://$host:$server_port$request_uri;
}
本文轉載于:https://juejin.cn/post/7539732578423062569
如果對您有所幫助,歡迎您點個關注,我會定時更新技術文檔,大家一起討論學習,一起進步。


浙公網安備 33010602011771號