Grails + Tomcat + Apache 切换到 HTTPS 时出现错误

2023-12-19

我们有一个 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。 谢谢


虽然我还不能告诉你如何解决它,但我可以告诉你问题是什么。

它本质上是重写入口点。

因此,在这些情况下你应该做的部分事情已经确定:

grails.plugins.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true

然后,这将通过设置标头来查找我们是否真正位于 http/https 上,默认值为:

RequestHeader 设置 X-Forwarded-Proto "http"

现在我在 nginx 中工作得很好。对于前面的 apache,问题是重写规则没有选择 apache 服务器。他们只是拾起自我。因此,当它运行时,它基本上会遇到无限重定向,因为它只知道您所在的 9013 服务器。

现在我想我将编写我自己的自定义 HttpsEntry 但我想有一些 apache 设置可以使这项工作正常进行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Grails + Tomcat + Apache 切换到 HTTPS 时出现错误 的相关文章

随机推荐

  • Android Sqlite getReadableDatabase [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 任何人都可以帮助我吗 我正在做时间表
  • ActiveRecord:获取今天应该被禁止的所有用户

    我有两个模型 class User lt ActiveRecord Base has many ban messages dependent destroy end class BanMessage lt ActiveRecord Base
  • 您从哪里引入 jQuery 库?谷歌JSAPI? CDN?

    有几种方法可以包含 jQuery 和 jQuery UI 我想知道人们在使用什么 谷歌JSAPI jQuery 的网站 您自己的网站 服务器 另一个CDN 我最近一直在使用 Google JSAPI 但发现设置 SSL 连接甚至仅解析 go
  • 将 HTML 转换为纯文本(包含

    是否可以使用 Nokogiri 将 HTML 转换为纯文本 我也想包括 br tag 例如 给定以下 HTML p ala ma kota p br span i kot to idiota span 我想要这个输出 ala ma kota
  • play Framework2:查明应用程序是否在 http 或 https 上运行

    我试图查明 play 2 使用 scala 应用程序是否在 http 或 https 上运行 我尝试使用routes Application index absoluteURL request 像这样 def chatUri usernam
  • 我可以使用 Chrome 扩展程序修改传出请求标头吗?

    我在 中看不到这个问题的答案开发者指南 http code google com chrome extensions devguide html 尽管也许我没有找对地方 我想使用 Chrome 扩展拦截 HTTP 请求 然后转发它 可能使用
  • cURL 需要 CURLOPT_SSL_VERIFYPEER=FALSE

    我在本地主机上使用 cURL 的时间最长 突然我发现它不再起作用 除非我明确设置该选项 CURLOPT SSL VERIFYPEER FALSE 我不知道这是如何 何时改变的 但我正在使用 NGINX 和 PHP 并且我可以验证这不是特定请
  • paramiko:打开并返回 sftp 连接的方法

    我想编写一个方法 它接受 IP 用户名和密码 并返回到该服务器的开放 SFTP 连接 这是我使用的代码paramiko def open sftp connection ip user passwd ssh SSHClient ssh lo
  • 实体框架代码优先:SaveChanges 不是原子的

    我有以下非常简单的单元测试 它重现了 DbContext SaveChanges 不是原子的情况 我所说的非原子性是指在所有提交完成之前可以读取提交的数据 添加任务 在循环中添加一个新的 TestEntity 和 ReferencingEn
  • 如何检查 APK 是否已签名或“调试版本”?

    据我所知 在android中 发布版本 是签名的APK 如何检查从代码或者 Eclipse 有某种秘密定义吗 我需要它来调试从 Web 服务数据填充 ListView 项目 不 logcat 不是一个选项 我的想法 应用程序的android
  • 如何默认启用 org-indent-mode?

    我使用的是 Emacs 25 1 50 2 当我使用组织模式时 org indent mode默认关闭 所以我必须使用它来启用它M x org indent mode每次 我将下面的 lisp 放入我的配置文件中 emecs d init
  • 如何在 Eclipse Java 调试器中将字节数组显示为十六进制字节或无符号十进制数字的数组?

    我想在 Eclipse Helios 版本 版本 ID 20100617 1415 Java 调试器中将字节数组查看为十六进制字节数组 每个字节 2 位 或无符号十进制数 那可能吗 如何 例如 我想显示这个 如 0 48 71 22 139
  • ClassCastException 将 List 转换为 Class

    我有一个方法 它有一个输入列表 每个输入值我必须将其转换为所需的类型 实际上这个列表有 一些 形式的参数值 我应该将其转换为所需类型 所需类型是方法所需的类型 这是用于通过反射调用api的 我写过这样的代码 Type argTypes me
  • dispatch_once 调用导致崩溃

    dispatch once在我将项目转换为 ARC 后 调用会导致崩溃 在模拟器中 我最初的问题是我有EXC BAD ACCESS 在 objc retain 调用中 我的单例对象之一崩溃 Singleton Class shared di
  • 数据格式问题。将 GridView 导出到 Excel

    曾经有一根绳子 1008901023816550000000 在 GridView 中以某种方式保存为科学数字 1 0089E 21 当我将 GridView 导出到 Excel 时 在 Excel 中 我正在使用 Net 4 0 这是我尝
  • 用于按城市相关性排序的 freebase api

    我有一个查询 我想返回给定国家 地区的所有城市 这工作得很好 除了我还想调整一下 以便按大小或任何重要性顺序对其进行排序 以避免 100 的限制 我希望前 100 个城市中人们最有可能选择的城市首先列出 人口 或者 location cou
  • 在 Ruby on Rails 中将非 www 请求重定向到 www URL

    这是一个简单的问题 但我似乎无法通过快速谷歌搜索找到答案 Ruby on Rails 直接执行 301 的方式是什么 http x com abc http x com abc gt http www x com abc http www
  • 我可以在 Sybase 中使用 MS SQL 语法吗?

    我曾从事 SQL Server 数据库方面的工作 现在我必须处理 Sybase 数据库 使用 Squirrel 客户端 该查询不起作用 DECLARE tableName VARCHAR 500 DECLARE my cursor CURS
  • 将图标添加到引导下拉菜单项

    我正在尝试向引导下拉菜单添加一些图标 请参阅下面的小提琴 正如您所看到的 图标已添加 但它将菜单项推到右侧 并且该菜单项不再与其他项目对齐 执行此操作的适当方法是什么 jsfiddle http jsfiddle net nr2mg div
  • Grails + Tomcat + Apache 切换到 HTTPS 时出现错误

    我们有一个 Grails Web 应用程序 在 Apache2 后面的 tomcat7 中运行 通过使用 ProxyPass 和 ajp 协议 一切正常 ProxyPass ajp localhost 9013 ProxyPassrever