У меня есть следующий пример
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
nginx
http-headers
Майк
источник
источник
Вы должны использовать
proxy_set_header
все заголовки, которые вы хотите перенаправить на серверы. Итак, вместоproxy_pass_header ...
строки:источник
Вышеупомянутое не работает для меня, так что я использовал
proxy_pass_header
. Смотрите Nginx Wiki о proxy_pass_header здесь .Если ваш пользовательский заголовок
device_id
добавленproxy_pass_header device_id;
в ваш прокси-блок.Если вы используете пользовательские заголовки с подчеркиванием (как и я), убедитесь, что вы указали их
underscores_in_headers on
в своей конфигурации Nginx.источник
По умолчанию nginx перенаправляет все заголовки ( proxy_pass_request_headers on; ) на внутренний сервер. Но если ваш заголовок запроса (может быть настраиваемым заголовком) содержит подчеркивание (_) в имени заголовка, тогда nginx блокирует эти заголовки.
Чтобы разрешить Nginx передавать весь или пользовательский запрошенный заголовок в бэкэнд, включите опцию подчеркивания.
источник