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.
nginx
http-headers
proxypass
Sorin
quelle
quelle
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:
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.
quelle
Secure
undHttpOnly
zu kennzeichnen ? Das Zielantwort-Cookie enthält jedoch nur das Cookiename
und dieexpire
Attribute.add_header
funktioniert sowohl mitproxy_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:
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 verwendenalways
, um benutzerdefinierte Header auch in Fehlerantworten einzuschließen. Beispielsweise:Einschränkung: Sie können den
server
Header-Wert nicht mit überschreibenadd_header
.quelle
add_header X-Upstream $upstream_addr always;
X-Upstream: 10.10.10.10
vsX-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:
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:quelle
Sie könnten diese Lösung ausprobieren:
location
Wenn Sie in Ihrem Block Folgendes verwenden,proxy_pass
gehen Sie wie folgt vor: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:
quelle
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"; } }
Blenden Sie den Antwortheader aus und fügen Sie dann einen neuen benutzerdefinierten Headerwert hinzu
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:In
proxy_hide_header
Kombination mit erhaltenadd_header
Sie also die Möglichkeit, Antwortheaderwerte festzulegen / zu ersetzen.Eine ähnliche Antwort finden Sie hier auf ServerFault
AKTUALISIEREN:
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).quelle