📢 Nginx & SSL 端口管理分析
1?? 域名解析與 SSL 申請失敗分析
在使用寶塔申請 www.mywebsite.test
的 SSL 證書時,遇到了解析失敗的問題。最初,我認為 www
只是一個附加的前綴,不屬于域名的關鍵部分,因此只為 mywebsite.test
配置了解析,而沒有為 www.mywebsite.test
添加 DNS 記錄。
然而,在 SSL 申請過程中,Let’s Encrypt 需要驗證 www.mywebsite.test
是否可以被正確解析并訪問,而由于缺少 DNS 記錄,驗證失敗,導致 SSL 申請無法成功。
分析原因
www.mywebsite.test
和mywebsite.test
是獨立的域名,需要單獨解析。- 申請 SSL 證書時,每個域名(包括
www
版本)都必須有對應的 DNS 解析。 - 訪問
www.mywebsite.test
時,如果沒有 DNS 解析,服務器無法找到該域名對應的 IP,導致驗證失敗。
解決方案
在 DNS 解析控制臺為 www.mywebsite.test
添加 A
記錄,使其指向服務器 IP,等待解析生效后,重新申請 SSL 證書。
nslookup www.mywebsite.test # 確認解析是否生效
此外,也可以為 mywebsite.test
配置 CNAME
記錄,讓 www
自動指向主域名,減少維護成本:
www CNAME mywebsite.test
2?? Nginx 443 端口沖突問題
在配置多個站點時,發現 www.mywebsite.test
和 www.anotherwebsite.test
都監聽 443
端口,疑惑是否會產生沖突。
分析
Nginx 采用 SNI(Server Name Indication) 機制,通過 server_name
識別不同的域名,并選擇相應的 SSL 證書,因此多個站點可以共用 443
端口,不會產生端口沖突。
示例配置
server {listen 443 ssl;server_name www.mywebsite.test;
}server {listen 443 ssl;server_name www.anotherwebsite.test;
}
訪問 https://www.mywebsite.test
時,Nginx 會匹配正確的 server_name
并使用對應 SSL 證書。
3?? Nginx 443 端口是否影響后端服務
如果后端服務運行在同一臺服務器,是否會與 Nginx 監聽 443
端口發生沖突?
分析
- Nginx 作為反向代理,通常監聽
443
端口,將請求轉發到不同的后端端口(如8443
、5000
)。 - 只要后端服務 不直接監聽 443 端口,則不會發生端口沖突。
示例
如果后端服務監聽 5000
端口,則 Nginx 可以代理流量:
server {listen 443 ssl;server_name api.mywebsite.test;location / {proxy_pass http://127.0.0.1:5000;}
}
4?? 如果后端服務未通過 Nginx 代理
假設后端服務運行在 5000
端口,但 未通過 Nginx 代理,則會導致以下問題:
? 問題
- 后端服務無法使用 HTTPS
- 由于 SSL 證書通常由 Nginx 處理,直接訪問
http://服務器IP:5000
時,連接不會加密。
- 由于 SSL 證書通常由 Nginx 處理,直接訪問
- 需要手動開放端口
- 必須手動在防火墻中允許
5000
端口,否則外部無法訪問。
sudo ufw allow 5000
- 必須手動在防火墻中允許
- API 端口暴露風險
- 直接暴露
5000
端口,使 API 端點容易成為攻擊目標。
- 直接暴露
? 推薦做法
使用 Nginx 代理后端服務,使其支持 HTTPS,并統一流量管理。
server {listen 443 ssl;server_name api.mywebsite.test;location / {proxy_pass http://127.0.0.1:5000;}
}
這樣,用戶可以通過 https://api.mywebsite.test
訪問后端,而后端仍然運行在 5000
端口。
🔥 總結
www
版本和非www
版本的域名需要單獨解析,不能默認互通。- 多個站點可以共用 443 端口,Nginx 通過
server_name
匹配不同站點,不會沖突。 - 后端服務不應直接監聽 443 端口,而是讓 Nginx 代理 HTTPS 訪問。
- 如果后端未通過 Nginx 代理,API 端口可能暴露,且無法使用 HTTPS,存在安全風險。
推薦最佳實踐:
? 使用 Nginx 代理后端 API,讓所有流量都走 HTTPS,避免端口暴露和安全風險。