修飾されていないホスト名に対して nginx を設定するにはどうすればいいですか?

修飾されていないホスト名に対して nginx を設定するにはどうすればいいですか?

リバース プロキシとして nginx を設定しています。これまでは仮想ホストなしで Apache のみを使用していました。

ユーザーがアドレス バーにサービス名を入力するだけで、さまざまなイントラネット Web サービスにアクセスできるようにしたいと考えています。たとえば、「timesheets.intranet.local」ではなく「timesheets」と入力します。

クライアント マシンで「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

関連情報