Was ist in Nginx der Unterschied zwischen Variablen $host
und $http_host
.
quelle
Was ist in Nginx der Unterschied zwischen Variablen $host
und $http_host
.
$host
ist eine Variable des Core- Moduls.
$ host
Diese Variable entspricht der Zeile Host im Header der Anforderung oder dem Namen des Servers, der die Anforderung verarbeitet, wenn der Host-Header nicht verfügbar ist.
Diese Variable kann in folgenden Fällen einen anderen Wert als $ http_host haben: 1) Wenn der Host-Eingabekopf fehlt oder einen leeren Wert hat, entspricht $ host dem Wert der Direktive server_name; 2) Wenn der Wert von Host die Portnummer enthält, enthält $ host diese Portnummer nicht. Der Wert von $ host ist seit 0.8.17 immer klein geschrieben.
$http_host
ist auch eine Variable desselben Moduls, aber Sie werden sie nicht mit diesem Namen finden, da sie generisch als $http_HEADER
( ref ) definiert ist.
$ http_HEADER
Der Wert des HTTP-Anforderungsheaders HEADER bei Konvertierung in Kleinbuchstaben und bei Konvertierung von 'Strichen' in 'Unterstriche', z. B. $ http_user_agent, $ http_referer ...;
Zusammenfassend:
$http_host
entspricht immer dem HTTP_HOST
Anforderungsheader.$host
gleich $http_host
, klein geschrieben und ohne die Portnummer (falls vorhanden), außer wenn nicht HTTP_HOST
vorhanden oder ein leerer Wert ist . In diesem Fall $host
entspricht dies dem Wert der server_name
Direktive des Servers, der die Anforderung verarbeitet hat.
server_name
, der im aktuellen Serverblock definiert ist. Wenn Sie mehrereserver_name
s haben, wird nur das erste angezeigt.server_name
Anweisungen haben. Wenn Sie im ersten einen regulären Ausdruck haben, wird dieser zum$host
und alle möglichen hässlichen Dinge können beim Umschreiben von Regeln passieren.$server_name
Variable demserver_name
Wert der Direktive oder dem tatsächlichen Servernamen, der ausgewählt wurde, wenn mehrereserver_name
Direktiven vorhanden waren ?$server_name
ist immer gleich dem ersten Wert, der mit der Anweisung server_name angegeben wurde. Mit Zum Beispielserver_name example.com one.example.com two.example.com;
,$server_name
wird immer „example.com“ sein, unabhängig davon , welcher Host der Benutzer festgelegt hat . Wenn Sie keine habendefault_server
, ist der Host möglicherweise etwas völlig anderes (wie example.org).