Benutzerdefinierten Header von Nginx Reverse Proxy weiterleiten

25

Ich habe einen Nginx-Webserver, der als Reverse-Proxy fungiert, um Anfragen zur weiteren Bearbeitung an Apache weiterzuleiten (ich bitte Sie, nicht zu fragen, warum). Ich habe eine Anfrage, an die ich einen benutzerdefinierten Header anhängen möchte, und ich möchte, dass Nginx diesen benutzerdefinierten Header an Apache weiterleitet, damit ich in einer App etwas damit anfangen kann.

Ich habe die HttpProxyModuleDokumente durchgesehen , aber sie sind nicht sehr aussagekräftig, selbst wenn ich am richtigen Ort bin (es könnte sehr gut sein, dass ich es nicht bin).

Wie kann ich Nginx dazu bringen, einen X-CUSTOM-REFERRERHeader weiterzuleiten ? Darüber hinaus möchte ich, falls möglich, einen benutzerdefinierten Header weiterleiten , der hereinkommt. Wenn der letztere zu viel verlangt, würde der erstere für meinen aktuellen Bedarf ausreichen.

Wie Sie sehen, ist Nginx für mich sehr neu, daher wäre die Korrekturversion hilfreich.

Vielen Dank.

AKTUALISIEREN

Das relevante Snippet aus meiner bestehenden Konfiguration:

location / {
    proxy_pass                  http://preview;
    proxy_redirect              off;
    proxy_set_header            Host $host;
    proxy_set_header            X-Real-IP $remote_addr;
    proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
    # proxy_set_header            X-Custom-Referrer $x_custom_referrer;
}
Rob Wilkerson
quelle

Antworten:

20

Die proxy_set_headerAnweisung von dem HttpProxyModule ermöglicht es Ihnen, das auszuführen . Beispielsweise:

proxy_pass http://apachehost;
proxy_set_header X-Custom-Referrer $proxy_add_<header_field_name_from_last_request>;
mgorven
quelle
1
Danke, @mgorven. Der eingehende Wert ist jedoch variabel. Kann ich einen Wert aus dem eingehenden X-Custom-ReferrerHeader lesen und weitergeben? proxy_set_header X-Custom-Referrer $x_custom_referreroder etwas in diesem Sinne?
Rob Wilkerson
1
Ja, du kannst verwenden $http_x_custom_referrer. Alle vom Client gesendeten Header sollten jedoch automatisch an das Backend weitergeleitet werden. Hast du proxy_pass_request_headers offirgendwo gesetzt?
mgorven
Nicht das ich sehen kann. Ich habe meine Frage mit einem Snippet aus meiner Konfigurationsdatei aktualisiert. Dieser Header schafft es definitiv nicht in die App. Trotzdem gehe ich davon aus, dass die Quell-Apps sie senden, also werde ich meine Sorgfalt walten lassen und sicherstellen, dass dies das Standardverhalten ist.
Rob Wilkerson
@RobWilkerson in Ihrem Snippet ist die relevante auskommentiert proxy_set_header; auch Sie verwenden $x_custom_referreranstelle von $http_x_custom_referrer...
Severin
Ich denke, @ mgorvens Antwort sollte so aktualisiert werden, dass sie $http_<custom_header_field>statt$proxy_add_<custom_header_field>
Tri Nguyen
2

Mit dem Modul ngx_headers_more können Sie http-Header ändern und hinzufügen.

Yohann
quelle
Dieses Modul fügt der Antwort Header hinzu. Darum bittet das OP nicht. Sie müssen in a einen zusätzlichen Header an den Upstream senden proxy_pass.
Victor Schröder
1

Sie können übergeordnete Header (mit $ http_ beginnend) und zusätzliche benutzerdefinierte Header verwenden. Beispielsweise:

add_header X-Upstream-01 $http_x_upstream_01;
add_header X-Hdr-01  txt01;

Gehen Sie als nächstes zur Konsole und stellen Sie eine Anfrage mit dem Header des Benutzers:

curl -H "X-Upstream-01: HEADER1" -I http://localhost:11443/

Die Antwort enthält X-Hdr-01 (vom Server festgelegt) und X-Upstream-01 (vom Client festgelegt):

HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Mon, 30 Nov 2015 23:54:30 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
X-Hdr-01: txt01
X-Upstream-01: HEADER1
shcherbak
quelle
1
Dies setzt Header in der Antwort. Das OP möchte festlegen, dass Header einer proxy_passRichtlinie vorgeschaltet werden.
Victor Schröder