Мы используем nginx в качестве прокси для Java-приложения (оба в контейнерах докеров, но это, вероятно, не актуально). Когда мы пытаемся получить доступ к java-приложению через остальной клиент с определенным заголовком, SM_USER теряется во время прокси-прохода. Странная вещь: если мы используем CURL или PHP Zend Framework или надстройку Firefox rest для выполнения запроса, конфигурация прокси-прохода работает. Но если мы используем клиент Java Spring rest или soapUI, заголовок теряется. Если мы обойдем прокси, он будет работать и с Java / soapUI.
Мы используем следующую конфигурацию nginx:
server {
listen 80;
server_name devrest.example.com;
root /devrestserver;
underscores_in_headers on;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_request_headers on;
proxy_pass http://devrest:8080;
}
}
Как видите, мы используем underscores_in_headers в; и явно установите proxy_pass_request_headers на; в комплектации.
Tcpdump до того, как nginx вступит во владение, показывает нам, что заголовок SM_USER достигает сервера:
GET /resource/RoomType/ HTTP/1.1
Accept: text/plain, application/json, application/*+json, */*
Content-Type: application/json
SM_USER: atnqtjrce0cjfve0fbjbsov2ff
Accept-Language: de
User-Agent: Java/1.7.0_71
Host: devrest.example.com
Connection: keep-alive
Tcpdump в сети докеров (между прокси nginx и приложением) показывает, что заголовок исчез:
GET /resource/RoomType/ HTTP/1.0
X-Forwarded-Host: devrest.example.com
X-Forwarded-Server: devrest.example.com
X-Forwarded-For: 78.132.28.121
Host: devrest:8080
Connection: close
Accept: text/plain, application/json, application/*+json, */*
Content-Type: application/json
Accept-Language: de
User-Agent: Java/1.7.0_71
Я тоже пробовал
proxy_pass_header SM_USER;
как рекомендовано по следующей ссылке nginx возвращает пользовательский заголовок
и я попытался явно переименовать заголовок, используя следующее:
proxy_set_header X-siteminderuser $http_sm_user;
который работал полностью нормально при выполнении запроса CURL, но вообще не отображался при использовании Java. Похоже, что SM_USER отфильтрован еще до того, как переменная $ http _... вступит в силу.
Если я переименую заголовок в клиенте java rest и использую
proxy_set_header SM_USER $http_x_siteminder_user;
он проходит, но, к сожалению, очень сложно изменить это в исходном клиенте java rest (который является программным обеспечением от другой компании), поэтому я был бы очень признателен за любые предложения, как я могу передать заголовок SM_USER через прокси-сервер nginx. Не могли бы вы нам помочь?
У вас есть еще один серверный раздел над этим?
Эта ветка на форуме nginx предполагает, что он обращает внимание только на underscores_in_headers
директива в первом разделе сервера.