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

tomcat7 + nginx ssl вызывает цикл перенаправления

У нас следующая настройка: несколько поддоменов ведут к одному и тому же серверу, на котором запущен nginx в качестве прокси для каждого из них. Все поддомены в настоящее время используются для тестирования разрабатываемых функций, поэтому их содержимое более или менее идентично.

Примерно так выглядит каждый файл конфигурации сайта nginx

server {

listen       80;
server_name  full.web.address;

location / {
    proxy_pass              http://devhost:8080;
    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_cache global;
    proxy_cache_valid  200 302  600m;
    proxy_cache_valid  404      1m;

}

location /robots.txt {
    alias   /var/www/default/robots.txt;
}

}

server {

listen       443;
server_name  full.web.address;

location / {

    proxy_pass              http://devhost:8080/;

    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_set_header        X-Forwarded-Proto https;

    proxy_cache global;
    proxy_cache_valid  200 302  600m;
    proxy_cache_valid  404      1m;
}

location /robots.txt {
     alias   /var/www/default/robots.txt;
}

ssl                  on;
ssl_certificate      /etc/nginx/combined.crt;
ssl_certificate_key  /etc/nginx/cert.key;
ssl_session_timeout  5m;
ssl_protocols  SSLv2 SSLv3 TLSv1;
}

devhost или что-то еще, устанавливается в / etc / hosts скриптом при перезагрузке. Сейчас у нас работают три сервера Tomcat 7, и во всех их файлах web.xml есть следующее:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Confidential resources</web-resource-name>
        <url-pattern>/manager/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>
            CONFIDENTIAL
        </transport-guarantee>
    </user-data-constraint>
</security-constraint>

Каждый server.xml имеет то же самое:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8" />

<Engine name="Catalina" defaultHost="full.web.address">


  <Realm className="org.apache.catalina.realm.LockOutRealm">
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
           resourceName="UserDatabase"/>
  </Realm>

  <Host name="full.web.address"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">
    <Valve className="org.apache.catalina.valves.RemoteIpValve"
       remoteIpHeader="x-forwarded-for"
       remoteIpProxiesHeader="x-forwarded-by"
       protocolHeader="x-forwarded-proto"
    />
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

  </Host>
</Engine>

Они также используют тот же файл WAR. Я фактически все скопировал и просто изменил имена и IP-адреса. Проблема в том, что в одном из них идет https: //full.web.address/manager/ без проблем, на других он переходит в бесконечный цикл перенаправления на себя. Настройки и содержание идентичны.

Предложение «172.16 / 12 не включено по умолчанию, потому что его сложно описать с помощью регулярных выражений» заставило меня съежиться, когда я прочитал его в первый раз. В любом случае, вы можете просто скопировать регулярное выражение из Документация Tomcat 8 для RemoteIpValve. Вот полный пример:

      <Valve className="org.apache.catalina.valves.RemoteIpValve"
         internalProxies="10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}| 169\.254\.\d{1,3}\.\d{1,3}|127\.\d{1,3}\.\d{1,3}\.\d{1,3}| 172\.1[6-9]{1}\.\d{1,3}\.\d{1,3}|172\.2[0-9]{1}\.\d{1,3}\.\d{1,3}| 172\.3[0-1]{1}\.\d{1,3}\.\d{1,3}"
         protocolHeader="X-Forwarded-Proto" />

Может быть, вы могли бы включить это в свой ответ?

Новый день, новые идеи. Я проверил документацию Tomcat Valve, и она предоставила ответ в https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html во внутренних прокси:

По умолчанию разрешены 10/8, 192.168 / 16, 169.254 / 16 и 127/8; 172.16 / 12 не включен по умолчанию, потому что его сложно описать с помощью регулярных выражений.

Сервер, который не работал, находился в подгруппе 172.16 / 12, потому что он находится в контейнере Docker. Поскольку он недоступен снаружи и его порт не перенаправлен, было безопасно установить internalProxies = ". *"