Назад | Перейти на главную страницу

Проход прокси-сервера nginx, удаляющий заголовок SM_USER из запроса клиента Java Spring Rest

Мы используем 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 директива в первом разделе сервера.