2013-03-14 11 views
90

W Nginx, jaka jest różnica między zmiennymi $host i $http_host.

Odpowiedz

144

$host to zmienna modułu Core.

$ host

Zmienna ta jest równa linii Host w nagłówku żądania lub nazwy serwera przetwarzania żądania jeśli nagłówek hosta nie jest dostępny.

Ta zmienna może mieć inną wartość niż $ http_host w takich przypadkach: : 1) gdy nagłówek wejściowy hosta jest nieobecny lub ma pustą wartość, host jest równy wartości dyrektywy nazwa_serwera; 2), gdy wartość hosta zawiera numer portu, $ host nie uwzględnia tego numeru portu. $ Wartość hosta jest zawsze pisana małymi literami od 0.8.17.

$http_host jest również zmienną tego samego modułu, ale nie znajdziesz go z tej nazwy, ponieważ jest zdefiniowana ogólnie jako $http_HEADER (ref).

$ http_HEADER

Wartość żądania HTTP nagłówka głowicy, kiedy przekształca się małymi literami i „kreski” przekształcone „do” podkreślenia, np $ http_user_agent, $ http_referer ...;


Podsumowując:

  • $http_host równa zawsze nagłówek HTTP_HOST żądania.
  • $host równa $http_host, małymi literami i bez numeru portu (jeśli występuje), z wyjątkiem gdy HTTP_HOSTjest nieobecny lub jest pusta wartość. W takim przypadku $host jest równy wartości dyrektywy server_name serwera, który przetworzył żądanie.
+29

$ host jest konkretnie ** pierwszą 'nazwa_serwera' ** zdefiniowaną w bieżącym bloku serwera. jeśli masz wiele 'nazwa_serwera', pojawi się tylko pierwsza. –

+2

Prawda. W rzeczywistości dość typowe jest określenie: nazwa_serwera example.com www.example.com; – glarrain

+0

możesz również mieć wiele dyrektyw 'nazwa_serwera'. jeśli masz pierwsze wyrażeń regularnych w pierwszym, staje się to '$ host', a wszelkiego rodzaju brzydkie rzeczy mogą się zdarzyć podczas przepisywania reguł. –

Powiązane problemy