Nginxの$ hostと$ http_hostの違いは何ですか


回答:


217

$hostコアモジュールの変数です。

$ host

この変数は、リクエストのヘッダーのホスト行、またはホストヘッダーが使用できない場合はリクエストを処理するサーバーの名前と同じです。

この変数は、このような場合、$ http_hostとは異なる値を持つ可能性があります。1)Host入力ヘッダーが存在しないか空の場合、$ hostはserver_nameディレクティブの値と同じです。2)Hostの値にポート番号が含まれている場合、$ hostにはそのポート番号は含まれません。$ hostの値は0.8.17以降常に小文字です。

$http_hostも同じモジュールの変数ですが、一般的に$http_HEADERrefとして定義されているため、その名前では見つかりません)。

$ http_HEADER

小文字に変換され、「ダッシュ」が「アンダースコア」に変換されたときのHTTPリクエストヘッダーHEADERの値。例:$ http_user_agent、$ http_referer ...;


要約:

  • $http_host常にHTTP_HOST要求ヘッダーと同じです。
  • $host等しい$http_host小文字、ポート番号なし(存在する場合)。ただし、HTTP_HOSTがない場合や空の値の場合は除きます。その場合、リクエストを処理したサーバー$hostserver_nameディレクティブの値と同じです。

57
$ hostは、具体的にserver_name、現在のサーバーブロックで定義されている最初のホストです。複数server_nameのがある場合、最初ののみが表示されます。
Jonathan Vanasco 2013年

4
そうだね。実際、次のように定義するのは非常に一般的です。server_nameexample.com www.example.com;
glarrain 2013年

複数のserver_nameディレクティブを持つこともできます。最初の正規表現に正規表現があると、それがになり、$host書き換えルールの実行中にあらゆる種類の醜いことが起こります。
Jonathan Vanasco 2013年

5
$server_name変数が等しくserver_nameディレクティブの値または複数あった場合、選択された実際のサーバー名server_nameディレクティブは?
CMCDragonkai 2014年

1
@CMCDragonkai $server_nameは常に、server_nameディレクティブで指定された最初の値と等しくなります。たとえば、with server_name example.com one.example.com two.example.com;、ユーザーが指定したホスト$server_name関係なく、常に「example.com」になります。実際、がない場合default_server、ホストは完全に異なるものになる可能性があります(example.orgなど)。
ATLief
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.