
我正在將 nginx 設定為反向代理。我以前只用過Apache,沒有虛擬主機。
我希望我的用戶只需在網址列中輸入服務名稱即可存取各種 Intranet Web 服務。例如,輸入“timesheets”而不是“timesheets.intranet.local”。
在客戶端電腦上,如果我使用「wget」或瀏覽器存取網站的 FQDN (timesheets.intranet.local),那麼一切都很好。
在用戶端電腦上,如果我使用「wget」或瀏覽器存取網站的純主機名稱(時間表),則會失敗。
如果我在 nginx 伺服器機器上本地使用“wget”,那麼兩者都可以正常工作。
我的網站配置如下:
server {
server_name timesheets timesheets.intranet.local;
location / {
proxy_pass http://127.0.0.1:8080;
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /root/timesheet.crt;
ssl_certificate_key /root/timesheet.key;
}
名稱解析不是問題。客戶端電腦上的「wget」正確解析了 IP 位址,但仍然無法檢索頁面。
答案1
配置反向代理時,不僅要注意代理配置,還要考慮背後的服務配置。
代理不僅必須接受其虛擬主機中的名稱,而且還必須向後端發出預期的主機標頭。在這種情況下,最簡單的方法是配置代理程式和後端以接受短的不合格主機名稱。
另一種方法可能是覆蓋哪個主機標頭代理程式傳送到後端。然後你只需要你的後端只提供該主機名稱。看到這個答案https://stackoverflow.com/questions/14352690/change-host-header-in-nginx-reverse-proxy