nginx передаючи назад власний заголовок


13

У мене є такий приклад

           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;
            }

Тепер, коли я використовую наступний рядок завивки

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

Тепер це не працює .. apache / php у бекенді не бачить заголовка. Якщо я обходжу nginx, він працює

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

Відповіді:



2

Ви повинні використовувати proxy_set_headerдля всіх заголовків, які ви хочете переслати на сервери бекенда. Тож замість proxy_pass_header ...рядка:

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;

Я спробував це, і він не встановлює заголовок правильно, якщо я заміню $ http_x_custom_header на "foo", це працює
Майк

Я не впевнений, чому це не працювало для @Mike, але це працювало для мене. Я використовую X-Forwarded-Proto з $ http_x_forwarded_proto.
Тайлер Колліє

2

Вище сказане не працювало для мене, тому я звик proxy_pass_header. Дивіться Nginx Wiki про proxy_pass_header тут .

Якщо ваш власний заголовок device_idдодано proxy_pass_header device_id;до блоку проксі.

Якщо ви використовуєте заголовки з підкресленням (як я), обов'язково переконайтеся, що у вас є underscores_in_headers onконфігурація Nginx.


Дуже дякую ! Я витягнув волосся .... Твій пост мене полегшив ....
Фахад Ахаммед

1

За замовчуванням nginx пересилає всі заголовки ( proxy_pass_request_headers on; ) на забіжний сервер. Але якщо ваш заголовок запиту (може бути спеціальним заголовком) містить підкреслення (_) у назві заголовка, тоді nginx блокує ці заголовки.

Ex: authenticate_type, cdn_enable.

Щоб Nginx передавав усі або користувальницький запитуваний заголовок до бекенда, увімкніть опцію підкреслення.

underscores_in_headers on;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.