动态

详情 返回 返回

圖文並茂講解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:https://letsencrypt.org/zh-cn/

  • Let's Encrypt提供免費的SSL證書
  • 主流瀏覽器都支持
  • 缺點就是證書有效期只有90天
  • 需要每三個月手動更新一次

付費的雲服務器供應商提供

  • 付費ssl證書也不貴,普通的也就幾十塊錢一年

nginx代碼控制

下載nginx證書

比如,筆者在騰訊雲後台下載對應的ssl證書

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

這四個文件分別是:

  1. ashuai.work.csr——部署時不需要

    • csr後綴全稱:Certificate Signing Request(證書籤名請求)
    • 作用:這是我們在申請證書時生成的一個請求文件,包含了我們公鑰和域名等信息,提交給 CA(騰訊雲)用於簽發證書。
  2. ashuai.work.key——部署時需需要

    • 全稱:Private Key(私鑰)
    • 作用:這是生成 CSR 時同時產生的私鑰,非常關鍵,必須保密,不能泄露。
  3. ashuai.work_bundle.crt——部署時需需要

    • 作用:這是證書鏈文件,包含了我們的域名證書 + 中間 CA 證書(有時也包括根證書),用於建立信任鏈。
  4. 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;
}
  • 至此,nginx中http升級https知識點總結就講述完畢
  • 創作不易,歡迎各位看官老爺們一鍵三連,支持鼓勵一下 ^\_^
A good memory is better than a bad pen. Record it down...
user avatar lhsuo 头像 duiniwukenaihe_60e4196de52b7 头像 hu_qi 头像 yayahonghong 头像 jueqiangqingtongsan 头像 yils_lin 头像 huaihuaidedianti 头像 aitinggedeyuechikou 头像 jump_and_jump 头像 steven_code 头像 maililuo 头像 zhanwang 头像
点赞 19 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.