NGINX leitet bei Verwendung von proxy_pass keinen Header-Wert weiter


8

Ich habe das folgende Setup und konfiguriert, um alle / API-Anforderungen an einen anderen Server zu senden:

location /api {
    proxy_pass              https://myapp.herokuapp.com;
    rewrite                 ^/api/(.*)              /$1     break;
}

Meine App sendet einen Header (USER_CUSTOMER), wenn sie direkt mit myapp.herokuapp.com von der App aus kommuniziert, die sie funktioniert. Wenn sie jedoch über den Proxyserver anfordert, wird der Wert auf dem API-Server als NULL angezeigt.

Das Folgende funktioniert in NGINX, aber ich brauche die App, um den Wert von USER_CUSTOMER festlegen zu können.

location /api {
    proxy_pass              https://app.herokuapp.com;
    proxy_set_header        USER_CUSTOMER           ABC;
    rewrite                 ^/api/(.*)              /$1     break;
}

Möglicherweise muss ich in Zukunft zusätzliche Header senden, daher hoffe ich, dass es ein Flag gibt, mit dem alle Header vom Proxy an den API-Server übergeben werden können.

Ubuntu
nginx/1.1.19

Antworten:


25

Das Header-Attribut USER_CUSTOMER ist eine ungültige Syntax. Unterstriche sind in Headerattributen nicht gültig.

Es gibt eine Problemumgehung, aber die beste Lösung besteht darin, das Attribut in eine gültige Syntax umzuschreiben.

Um dieses Problem zu umgehen, müssen Sie Folgendes festlegen, in dem Sie den Servernamen in der Konfiguration angeben:

underscores_in_headers on;

1
Funktioniert in meinem Fall nicht, das Fehlerprotokoll zeigt: nginx: [emerg] "underscores_in_headers" Direktive ist hier in nginx.conf: 55
thinkhy

1
Danke, das hat funktioniert!
Magico

Hat funktioniert!! Aber wenn Anfrage von der Android App aufgerufen wird, zeigt es mich undefiniert.
Vishnu S Babu

5

Ich denke, Sie suchen nach einer proxy_pass_request_headersOption. Setzen Sie es auf:

location /api {
    proxy_pass_request_headers      on;
    proxy_pass                      https://app.herokuapp.com;
    proxy_set_header                USER_CUSTOMER              ABC;
    rewrite                         ^/api/(.*)                 /$1     break;
}

Dies hat leider keine Auswirkungen.
Dallasclark

2
@ Dallasclark: Sinnvoll, weil die Standardeinstellung ist, dass es auf ... nginx.org/en/docs/http/…
OmarOthman

5 Jahre später funktioniert dies :)
Miroslav Trninic
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.