Ich möchte einen benutzerdefinierten Header für die Antwort hinzufügen, die vom Server hinter nginx empfangen wurde.
Funktioniert zwar add_header
für von Nginx verarbeitete Antworten, tut jedoch nichts, wenn das proxy_pass
verwendet wird.
Ich möchte einen benutzerdefinierten Header für die Antwort hinzufügen, die vom Server hinter nginx empfangen wurde.
Funktioniert zwar add_header
für von Nginx verarbeitete Antworten, tut jedoch nichts, wenn das proxy_pass
verwendet 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.
Secure
und HttpOnly
zu kennzeichnen ? Das Zielantwort-Cookie enthält jedoch nur das Cookie name
und die expire
Attribute.
add_header
funktioniert sowohl mit proxy_pass
als 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.5
Sie 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 server
Header-Wert nicht mit überschreiben add_header
.
add_header X-Upstream $upstream_addr always;
X-Upstream: 10.10.10.10
vs X-Upstream: 53c2d28edefdf501ab7c92e02a0c1687
(md5 ist wahrscheinlich nicht hilfreich beim Maskieren der Infrastruktur, vermittelt aber die Idee).
add_header
Direktive. Sie müssen sie überhaupt nicht senden.
Wie Oliver schreibt:
add_header
funktioniert sowohl mitproxy_pass
als auch ohne.
Doch wie Shane schreibt, wie von Nginx 1.7.5, Sie passieren müssen , always
um zu bekommen , add_header
um Arbeit für Fehlerreaktionen, etwa so:
add_header X-Upstream $upstream_addr always;
Sie könnten diese Lösung ausprobieren:
location
Wenn Sie in Ihrem Block Folgendes verwenden, proxy_pass
gehen 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_header
funktioniert 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-Origin
Header 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_header
Kombination mit erhalten add_header
Sie 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).