Chcę dodać niestandardowy nagłówek do odpowiedzi otrzymanej z serwera za nginx.
Chociaż add_header
działa w przypadku odpowiedzi przetwarzanych przez nginx, nic nie robi, gdy proxy_pass
jest używany.
nginx
http-headers
proxypass
sorin
źródło
źródło
Odpowiedzi:
Istnieje moduł o nazwie HttpHeadersMoreModule, który zapewnia większą kontrolę nad nagłówkami. Nie jest dostarczany z Nginx i wymaga dodatkowej instalacji. Dzięki niemu możesz zrobić coś takiego:
Spowoduje to „ustawienie nagłówka wyjściowego serwera na niestandardową wartość dla dowolnego kodu stanu i dowolnego typu zawartości”. Zastąpi nagłówki, które są już ustawione, lub doda je, jeśli nie są ustawione.
źródło
Secure
iHttpOnly
oznaczać pliki cookie odpowiedzi ? Jednak docelowy plik cookie odpowiedzi ma tylko plik cookiename
iexpire
atrybuty.add_header
działa równie dobrzeproxy_pass
jak bez. Właśnie dzisiaj ustawiłem konfigurację, w której użyłem dokładnie tej dyrektywy. Muszę jednak przyznać, że również walczyłem z konfiguracją tego, nie pamiętając dokładnie powodu.W tej chwili mam działającą konfigurację i zawiera ona (między innymi):
Przed nginx
1.7.5
add_header pracował tylko nad udanymi odpowiedziami, w przeciwieństwie do HttpHeadersMoreModule, o którym wspomniał Sebastian Goodman w swojej odpowiedzi .Od nginx
1.7.5
możesz użyć słowa kluczowego,always
aby dołączyć niestandardowe nagłówki nawet w odpowiedziach na błędy. Na przykład:Ograniczenie: nie można zastąpić
server
wartości nagłówka za pomocąadd_header
.źródło
add_header X-Upstream $upstream_addr always;
X-Upstream: 10.10.10.10
vsX-Upstream: 53c2d28edefdf501ab7c92e02a0c1687
(md5 prawdopodobnie nie jest pomocny w maskowaniu infrastruktury, ale przekazuje ideę).add_header
dyrektywy. W ogóle nie musisz ich wysyłać.Jak pisze Oliver:
Jednak, jak pisze Shane, od wersji Nginx 1.7.5 musisz przejść
always
, aby rozpocząćadd_header
pracę nad odpowiedziami na błędy, na przykład:źródło
Ukryj nagłówek odpowiedzi, a następnie dodaj nową niestandardową wartość nagłówka
Dodanie nagłówka z
add_header
działa dobrze z przebiegiem proxy, ale jeśli w odpowiedzi istnieje wartość nagłówka, wartości zostaną ułożone w stos.Jeśli chcesz ustawić lub zamienić wartość nagłówka (na przykład zamienić
Access-Control-Allow-Origin
nagłówek, aby pasował do klienta, aby umożliwić współdzielenie zasobów między źródłami), możesz wykonać następujące czynności:W
proxy_hide_header
połączeniu zadd_header
daje możliwość ustawiania / zastępowania wartości nagłówka odpowiedzi.Podobną odpowiedź można znaleźć tutaj na ServerFault
AKTUALIZACJA:
Uwaga:
proxy_set_header
służy do ustawiania nagłówków żądań przed dalszym wysłaniem żądania, a nie do ustawiania nagłówków odpowiedzi (te atrybuty konfiguracji dla nagłówków mogą być nieco mylące).źródło
Możesz wypróbować to rozwiązanie:
W swoim
location
bloku, kiedy używasz,proxy_pass
zrób coś takiego:Nie jestem pewien, czy to jest dokładnie to, czego potrzebujesz, ale spróbuj manipulacji tą metodą, a może wynik będzie pasował do Twojego problemu.
Możesz również użyć tej kombinacji:
źródło
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"; } }