У меня есть следующий пример
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
Вы должны использовать underscores_in_headers on
директива, которая по умолчанию отключена.
Вы должны использовать proxy_set_header
для всех заголовков, которые вы хотите переслать на внутренние серверы. Так что вместо proxy_pass_header ...
линия:
proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;
Вышеупомянутое для меня тоже не сработало, поэтому я использовал proxy_pass_header
. Увидеть Nginx Wiki о proxy_pass_header здесь.
Если ваш собственный заголовок device_id
Добавить proxy_pass_header device_id;
в свой блок прокси.
Если вы используете customheaders с подчеркиванием (например, я), убедитесь, что у вас есть underscores_in_headers on
в вашем Nginx Config.
По умолчанию nginx перенаправляет все ( proxy_pass_request_headers на;) заголовок для внутреннего сервера. Но если заголовок вашего запроса (может быть настраиваемым заголовком) включает подчеркивание (_) в имени заголовка, тогда nginx блокирует эти заголовки.
Ex: authenticate_type, cdn_enable.
Чтобы Nginx мог передавать весь или настраиваемый запрошенный заголовок в бэкэнд, включите параметр подчеркивания.
underscores_in_headers on;