У нас следующая настройка: несколько поддоменов ведут к одному и тому же серверу, на котором запущен 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 "%r" %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 = ". *"