nginx przekazuje niestandardowy nagłówek

13

Mam następujący przykład

           location / {
                    proxy_read_timeout 2000;
                    proxy_next_upstream error;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $http_host;
                    proxy_pass_header X_CUSTOM_HEADER;
                    proxy_redirect off;
                    proxy_max_temp_file_size 0;
                    proxy_pass https://prod;
                    break;
            }

Teraz, gdy używam następującej linii zwijania

curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test

Teraz to nie działa .. apache / php na backend nie widzi nagłówka. Jeśli pomijam nginx, to działa

curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test
Mikrofon
źródło

Odpowiedzi:

15

Powinieneś użyć underscores_in_headers ondyrektywy, która jest domyślnie wyłączona.

AlexD
źródło
Ta informacja oszczędza mi godziny.
Morgan Cheng
Z przyjemnością kupiłbym ci orzeźwiający napój.
ballmw
proszę pana, jesteś uczonym i dżentelmenem.
Eve Freeman,
2

Powinieneś używać proxy_set_headerwszystkich nagłówków, które chcesz przekazać do serwerów zaplecza. Zamiast proxy_pass_header ...linii:

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;
Mikko
źródło
Próbowałem tego i nie ustawia poprawnie nagłówka. Jeśli zastąpię $ http_x_custom_header słowem „foo”, zadziała
Mike
Nie jestem pewien, dlaczego to nie zadziałało w @Mike, ale zadziałało dla mnie. Używam X-Forwarded-Proto z $ http_x_forwarded_proto.
Tyler Collier
2

Powyższe też nie działało dla mnie, więc użyłem proxy_pass_header. Zobacz Wiki Nginx o proxy_pass_header tutaj .

Jeśli niestandardowy nagłówek zostanie device_iddodany proxy_pass_header device_id;do bloku proxy.

Jeśli używasz niestandardowych nagłówków z podkreśleniem (tak jak ja), upewnij się, że masz to underscores_in_headers onw Nginx Config.

użytkownik2700022
źródło
Wielkie dzięki !
Wyciągałam
1

Domyślnie nginx przekazuje wszystkie ( proxy_pass_request_headers na; ) nagłówek do serwera zaplecza. Ale jeśli nagłówek żądania (może być nagłówkiem niestandardowym) zawiera znak podkreślenia (_) w nazwie nagłówka, to nginx blokuje te nagłówki.

Ex: authenticate_type, cdn_enable.

Aby umożliwić Nginx przekazywanie całego lub niestandardowego żądanego nagłówka do backendu, włącz opcję podkreślenia.

underscores_in_headers on;
GangaRam Dewasi
źródło