Przekaż niestandardowy nagłówek z odwrotnego serwera proxy Nginx

25

Mam serwer sieci Web Nginx działający jako odwrotny serwer proxy do przekazywania żądań do Apache w celu dodatkowej obsługi (błagam, abyś nie pytał dlaczego). Mam prośbę, do której próbuję dołączyć niestandardowy nagłówek i chciałbym, aby nginx przesłał ten niestandardowy nagłówek do Apache, aby mógł coś z tym zrobić w aplikacji.

Przejrzałem HttpProxyModuledokumenty, ale nie są zbyt opisowe, nawet jeśli jestem we właściwym miejscu (bardzo dobrze, że nie jestem).

Jak mogę zmusić nginx do przekazania X-CUSTOM-REFERRERnagłówka? Co więcej, jeśli to możliwe, chciałbym, aby przesuwał się dalej po dowolnym niestandardowym nagłówku, który się pojawi. Jeśli ten ostatni jest zbyt duży, by zapytać, ten pierwszy byłby wystarczający dla mojej obecnej potrzeby.

Jak widać, jestem nowy w nginx, więc wersja naprawcza byłaby pomocna.

Dzięki.

AKTUALIZACJA

Odpowiedni fragment kodu z mojej istniejącej konfiguracji:

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
źródło

Odpowiedzi:

20

proxy_set_headerDyrektywa z HttpProxyModule pozwala to zrobić. Na przykład:

proxy_pass http://apachehost;
proxy_set_header X-Custom-Referrer $proxy_add_<header_field_name_from_last_request>;
mgorven
źródło
1
Dzięki, @mgorven. Jednak wartość wejściowa jest zmienna. Czy mogę odczytać wartość z przychodzącego X-Custom-Referrernagłówka i przekazać ją dalej? proxy_set_header X-Custom-Referrer $x_custom_referrerczy coś w tym rodzaju?
Rob Wilkerson
1
Tak, możesz użyć $http_x_custom_referrer. Jednak wszystkie nagłówki wysłane przez klienta powinny być automatycznie przekazywane do wewnętrznej bazy danych. Ustawiłeś proxy_pass_request_headers offgdzieś?
mgorven
Nie, żebym widział. Zaktualizowałem swoje pytanie za pomocą fragmentu z mojego pliku konfiguracyjnego. Jednak ten nagłówek zdecydowanie nie trafia do aplikacji. To powiedziawszy, zakładam, że aplikacje źródłowe go wysyłają, więc dołożę należytej staranności i upewnię się, czy to powinno być zachowanie domyślne.
Rob Wilkerson
@RobWilkerson w swoim fragmencie odpowiedni proxy_set_headerkomentarz jest zakomentowany; również używasz $x_custom_referrerzamiast $http_x_custom_referrer...
severin
Myślę, że odpowiedź @ mgorven powinna zostać zaktualizowana, aby $http_<custom_header_field>zamiast$proxy_add_<custom_header_field>
Tri Nguyen,
2

Moduł ngx_headers_more pozwala zmieniać i dodawać nagłówki http.

Yohann
źródło
Ten moduł dodaje nagłówki do odpowiedzi. Nie o to prosi OP. Muszą wysłać dodatkowy nagłówek w górę, w proxy_pass.
Victor Schröder
1

Możesz użyć nagłówków nadrzędnych (nazwanych od $ http_) i dodatkowych niestandardowych nagłówków. Na przykład:

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

następnie przejdź do konsoli i poproś o nagłówek użytkownika:

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

odpowiedź zawiera X-Hdr-01, ustawiony przez serwer i X-Upstream-01, ustawiony przez klienta:

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
źródło
1
To ustawia nagłówki odpowiedzi. OP chce ustawić nagłówki, które będą wysyłane na górę proxy_passdyrektywy.
Victor Schröder