tomcat7 + nginx ssl会导致redirect循环

我们有以下设置:几个子域导致相同的服务器,它运行nginx作为它们中的每一个的代理。 所有子域目前都用于testing开发中的function,所以它们的内容或多或less是相同的。

这或多或less是每个nginx站点configuration文件的样子

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/没有问题,其他人在它自己的无限redirect循环。 设置和内容是相同的。

新的一天,新的想法。 我查看了Tomcat的Valve文档,并在internalProxies中提供了https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html中的答案&#xFF1A;

默认情况下,允许10/8,192.168 / 16,169.254 / 16和127/8; 172.16 / 12默认情况下没有启用,因为使用正则expression式描述起来很复杂

不工作的服务器在172.16 / 12子组中,因为它在Docker容器中。 由于外部端口不能被转发,所以设置internalProxies =“。*”是安全的。

“172.16 / 12”这个句子默认是没有启用的,因为用正则expression式来描述是非常复杂的。“当我第一次阅读这个句子的时候,这让我感到害怕。 无论如何,你可以从RemoteIpValve的Tomcat 8文档中复制正则expression式。 这是一个完整的例子:

  <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" /> 

也许你可以把它纳入你的答案?