2013-03-14 18 views
90

Nginxでは、変数$host$http_hostの違いは何ですか?

答えて

144

$hostは、Coreモジュールの変数です。

$ホスト

この変数は、ホストヘッダが使用可能 ない場合、要求またはリクエストを処理するサーバの 名前のヘッダでホストを行に等しいです。

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

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

$ HTTP_HEADER

HTTPリクエストヘッダヘッダの値小文字に変換され、「ダッシュ」は、例えば、「下線」に変換すると$ http_user_agent、$ http_referer ...;


要約:

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

$ hostは、具体的には、現在のサーバーブロックで定義されている最初の 'server_name' **です。複数の 'server_name'がある場合は、最初のものだけが表示されます。 –

+2

真。実際には、以下のように定義するのが一般的です。server_name example.com www.example.com; – glarrain

+0

複数の 'server_name'ディレクティブを使用することもできます。あなたが最初に正規表現を持ってしまった場合、それは '$ホスト 'になり、書き換えルール中にあらゆる種類の醜いものが発生する可能性があります。 –

関連する問題