🧑💻 寫在開頭
點贊 + 收藏 === 學會🤣🤣🤣
為何網站要升級為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;
}