我们有一个 Grails Web 应用程序,在 Apache2 后面的 tomcat7 中运行。通过使用 ProxyPass 和 ajp 协议,一切正常:
ProxyPass / ajp://localhost:9013/
ProxyPassreverse / ajp://localhost:9013/
其中 9013 是我们在 tomcat 中的 AJP 端口server.xml
.
现在,我们的问题却是这样的。我们的 Grails 应用程序同时运行 HTTP 和 HTTPS。当转到应用程序中的某个区域时,Spring Security(Grails Spring Security 核心插件)会将您从使用 HTTP 的地址重定向到 HTTPS,例如当点击:
http://www.example.com/secure/path http://www.example.com/secure/path
Spring Security 会将您重定向到:
https://www.example.com/secure/path https://www.example.com/secure/path
但现在,当它重定向到那里时,服务器挂起,最后 Firefox 给出了“Firefox 检测到服务器正在以永远无法完成的方式重定向对此地址的请求。” error.
我是否正确假设 AJP 代理的某些重定向会出现问题?任何人都可以提供有关此设置如何工作的更多信息吗?
经过进一步观察,我们发现了以下内容:
当直接(通过 IP 和端口)访问 tomcat 中的应用程序时,一切正常 100%。但是一旦我们通过 Apache,Spring Security 重定向就不起作用了。您不断在 Apache 日志中收到以下内容:
staging.server.com:80 41.133.194.248 - - [05/Apr/2012:14:03:41 +0200] "GET /user/signup HTTP/1.1" 302 223 "http://staging.server.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0"
staging.server.com:80 41.133.194.248 - - [05/Apr/2012:14:03:42 +0200] "GET /user/signup HTTP/1.1" 302 223 "http://staging.server.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0"
staging.server.com:80 41.133.194.248 - - [05/Apr/2012:14:03:42 +0200] "GET /user/signup HTTP/1.1" 302 223 "http://staging.server.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0"
staging.server.com:80 41.133.194.248 - - [05/Apr/2012:14:03:42 +0200] "GET /user/signup HTTP/1.1" 302 223 "http://staging.server.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0"
...
apache 似乎神奇地让它再次尝试 http,而不是重定向到 https。
谢谢