rails不应redirect_to X-forwarded-host标头

时间:2019-05-01 13:24:55

标签: ruby-on-rails apache ruby-on-rails-5 puma

在rails(使用5.2.3)中,代码redirect_to events_path将发送带有新URL的302答复。该URL包含一个主机名,该主机名似乎是从请求的X-forwarded-host标头中提取的。

这似乎不正确,在这种情况下不起作用。在Rails中如何以及在哪里修改(或配置)此特定行为?

详细信息:

带有puma服务器的Rails应用程序在http://server1.private.internal:5959/的Intranet中运行。它与Apache(2.4)对话。 Apache在www.example.org上运行并与外界对话。 apache进行反向代理,因此该应用程序可以以https://www.example.org/myapp的身份访问。

redirect_to失败外,此方法有效。我对此进行了分析,然后发生了以下情况:

  1. Apache收到来自客户端的请求。
  2. Apache将请求传递到Rails,添加包含X-Forwarded-Host主机名的X-Forwarded-Serverwww.example.org HTTP标头。
  3. 用302和Location: http://www.example.org/events/给出答案,而实际上应该是Location: http://server1.private.internal:5959/events/
  4. Apache将该位置标头不变地传递给客户端,因为它不包含内部主机名,因此不会通过反向代理进行重写。
  5. 客户端无法使用此URL,因为它缺少SSL并且缺少正确的myapp路径。

解决方法:

Apache支持配置选项ProxyAddHeaders Off。使用此选项时,它将不会在步骤2中添加这些标头。然后,Rails会在Location标头中使用正确的内部URL进行回答,然后一切正常。

但是我不想在Apache中进行配置,我想在Rails应用程序中对其进行正确配置或编码。有人知道在哪里以及如何实现吗?

0 个答案:

没有答案