域名解析**只能映射到 IP 地址**,**不能直接指定端口**。訪問 www.test.com 默認走 80 端口,而服務跑在 168.0.0.1:8080/webRoot/login.jsp。
用戶 → www.test.com:80 → Nginx (80) → proxy_pass https://127.0.0.1:8080/webRoot/login.jsp → 後端服務
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass https://127.0.0.1:8080/webRoot/; # 注意結尾斜杠
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
| 配置項 | 作用 |
|---|---|
proxy_pass .../webRoot/ | 將請求轉發到後端上下文路徑,**結尾斜杠決定是否保留原 URI 部分** |
proxy_set_header Host | 傳遞原始 Host,後端可識別虛擬主機 |
X-Forwarded-For | 透傳客戶端真實 IP,後端日誌/限流依賴此頭 |
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| Nginx 反向代理 | 標準、高性能、支持 HTTPS/負載均衡/緩存 | 需額外部署 Nginx | **生產環境首選** |
Tomcat 修改 server.xml <Connector port="80"> | 無中間層 | 需 root 權限綁 80 端口、多應用端口衝突、HTTPS 配置繁瑣 | 單應用測試環境 |
| 應用內嵌重定向 | 代碼控制 | 暴露內部結構、SEO 不友好、雙重請求 | 不推薦 |
| 云服務商 URL 轉發 | 免運維 | 多為 302 跳轉、不支持路徑透傳、HTTPS 支持弱 | 靜態頁/簡單跳轉 |
# 安裝 certbot
sudo apt install certbot python3-certbot-nginx
# 自動申請證書並修改 Nginx 配置
sudo certbot --nginx -d www.test.com
# 續期自動化
sudo systemctl enable certbot.timer
C:\Windows\System32\drivers\etc\hosts:127.0.0.1 www.test.comhttps://www.test.com → 應直接顯示 /webRoot/login.jsp 內容,地址欄保持 www.test.com。**域名解析到 IP + Nginx 反代到端口/路徑**,是暴露內部服務的工業級標準做法。