如何為不合格的主機名稱配置 nginx?

如何為不合格的主機名稱配置 nginx?

我正在將 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

相關內容