本地正常而外網異常,通常由 網絡層面 或 配置綁定差異 引起,而非 Nginx 核心邏輯錯誤。
# 錯誤配置:僅綁定本地回環
server {
listen 127.0.0.1:80; # 只監聽本地,外網無法連接
...
}
# 正確配置:綁定所有介面或具體內網 IP
server {
listen 80; # 監聽所有 IPv4 介面
# 或 listen 0.0.0.0:80;
# 或 listen 192.168.1.100:80; # 監聽特定內網 IP
...
}
upstream backend {
server 127.0.0.1:8080; # 後端也只綁定本地,若 Nginx 在容器/不同主機會失效
# server 192.168.1.100:8080; # 改為內網 IP
# server backend-service:8080; # Docker 服務名
}
proxy_set_header Host $host; # 必須傳遞原始 Host
proxy_set_header X-Real-IP $remote_addr; # 後端獲取真實客戶端 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
部分後端應用(如 Tomcat、Spring Boot)依賴 Host 頭進行路由匹配,缺失會導致 404 或錯誤路由。
# 檢查端口佔用
netstat -tlnp | grep :80
ss -tlnp | grep :80
# 檢查 Nginx 進程
ps aux | grep nginx
nginx -t # 配置測試
server {
listen 80;
listen [::]:80; # IPv6 支持
server_name example.com www.example.com;
# 安全頭
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
location / {
proxy_pass https://127.0.0.1:8080;
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_connect_timeout 30s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# 靜態資源直接服務
location /static/ {
alias /var/www/static/;
expires 30d;
}
}
「本地正常外網異常」90% 是 綁定地址 或 防火牆/安全組 問題。建議養成「配置驗證三部曲」:語法檢查 → 本地測試 → 內網測試 → 外網測試。