Ich möchte einen benutzerdefinierten Header für die Antwort hinzufügen, die vom Server hinter nginx empfangen wurde.
Funktioniert zwar add_headerfür von Nginx verarbeitete Antworten, tut jedoch nichts, wenn das proxy_passverwendet wird.
Ich möchte einen benutzerdefinierten Header für die Antwort hinzufügen, die vom Server hinter nginx empfangen wurde.
Funktioniert zwar add_headerfür von Nginx verarbeitete Antworten, tut jedoch nichts, wenn das proxy_passverwendet wird.
Antworten:
Es gibt ein Modul namens HttpHeadersMoreModule , mit dem Sie mehr Kontrolle über Header haben. Es wird nicht mit Nginx geliefert und erfordert eine zusätzliche Installation. Damit können Sie so etwas tun:
location ... {
more_set_headers "Server: my_server";
}
Dadurch wird "der Server-Ausgabeheader für jeden Statuscode und jeden Inhaltstyp auf den benutzerdefinierten Wert gesetzt". Es ersetzt bereits gesetzte Header oder fügt sie hinzu, wenn sie nicht gesetzt sind.
Secureund HttpOnlyzu kennzeichnen ? Das Zielantwort-Cookie enthält jedoch nur das Cookie nameund die expireAttribute.
add_headerfunktioniert sowohl mit proxy_passals auch ohne. Ich habe gerade heute eine Konfiguration eingerichtet, in der ich genau diese Anweisung verwendet habe. Ich muss allerdings zugeben, dass ich mich ebenfalls bemüht habe, dies einzurichten, ohne mich genau an den Grund zu erinnern.
Im Moment habe ich eine funktionierende Konfiguration, die (unter anderem) Folgendes enthält:
server {
server_name .myserver.com
location / {
proxy_pass http://mybackend;
add_header X-Upstream $upstream_addr;
}
}
Vorher arbeitete nginx 1.7.5 add_header nur an erfolgreichen Antworten, im Gegensatz zu dem von Sebastian Goodman in seiner Antwort erwähnten HttpHeadersMoreModule .
Seit nginx können 1.7.5Sie das Schlüsselwort verwenden always, um benutzerdefinierte Header auch in Fehlerantworten einzuschließen. Beispielsweise:
add_header X-Upstream $upstream_addr always;
Einschränkung: Sie können den serverHeader-Wert nicht mit überschreiben add_header.
add_header X-Upstream $upstream_addr always;
X-Upstream: 10.10.10.10vs X-Upstream: 53c2d28edefdf501ab7c92e02a0c1687(md5 ist wahrscheinlich nicht hilfreich beim Maskieren der Infrastruktur, vermittelt aber die Idee).
add_headerDirektive. Sie müssen sie überhaupt nicht senden.
Wie Oliver schreibt:
add_headerfunktioniert sowohl mitproxy_passals auch ohne.
Doch wie Shane schreibt, wie von Nginx 1.7.5, Sie passieren müssen , alwaysum zu bekommen , add_headerum Arbeit für Fehlerreaktionen, etwa so:
add_header X-Upstream $upstream_addr always;
Sie könnten diese Lösung ausprobieren:
locationWenn Sie in Ihrem Block Folgendes verwenden, proxy_passgehen Sie wie folgt vor:
location ... {
add_header yourHeaderName yourValue;
proxy_pass xxxx://xxx_my_proxy_addr_xxx;
# Now use this solution:
proxy_ignore_headers yourHeaderName // but set by proxy
# Or if above didn't work maybe this:
proxy_hide_header yourHeaderName // but set by proxy
}
Ich bin mir nicht sicher, ob es genau das ist, was Sie brauchen, aber versuchen Sie es mit einer Manipulation dieser Methode, und vielleicht passt das Ergebnis zu Ihrem Problem.
Sie können auch diese Kombination verwenden:
proxy_hide_header headerSetByProxy;
set $sent_http_header_set_by_proxy yourValue;
location / { proxy_pass http://127.0.0.1:8080/; proxy_hide_header "Access-Control-Allow-Origin"; if ($http_origin ~* "^https://(example.com|www.example.com)$") { add_header Access-Control-Allow-Origin "$http_origin"; } }
Das Hinzufügen eines Headers mit add_headerfunktioniert einwandfrei mit dem Proxy-Pass. Wenn jedoch in der Antwort ein Header-Wert vorhanden ist, werden die Werte gestapelt.
Wenn Sie einen Header-Wert festlegen oder ersetzen möchten (z. B. den Access-Control-Allow-OriginHeader so ersetzen , dass er Ihrem Client entspricht, um die gemeinsame Nutzung von Ressourcen zwischen verschiedenen Ursprüngen zu ermöglichen), haben Sie folgende Möglichkeiten:
# 1. hide the Access-Control-Allow-Origin from the server response
proxy_hide_header Access-Control-Allow-Origin;
# 2. add a new custom header that allows all * origins instead
add_header Access-Control-Allow-Origin *;
In proxy_hide_headerKombination mit erhalten add_headerSie also die Möglichkeit, Antwortheaderwerte festzulegen / zu ersetzen.
Eine ähnliche Antwort finden Sie hier auf ServerFault
Hinweis: proxy_set_header dient zum Festlegen von Anforderungsheadern, bevor die Anforderung weiter gesendet wird, nicht zum Festlegen von Antwortheadern (diese Konfigurationsattribute für Header können etwas verwirrend sein).