我在 http 上有一个 jetty 应用程序。我的网络托管在 https 上的 apache 上运行反向代理,该代理代理到我的 jetty 应用程序 (http)。
浏览第一页(https://example.com/index.html) 可以工作,但是当我单击链接时,它又会回到 http。(http://example.com/link.html, 代替https://example.com/link.html)
如何解决这个问题?这是 apache 上的配置问题(应该重写 URL),还是 jetty 中的配置(我应该在 jetty 中配置诸如“规范 URL”之类的东西?)
实际上我无法更改 apache 中的配置(因为只有我的网络托管服务提供商可以访问它),所以我希望可以在 jetty 上解决该问题。怎么做?注意:我的 jetty 需要在 http 上运行(而不是 https 上),正如我的网络托管服务提供商所定义的那样。
答案1
尝试将以下内容添加到 Jetty 应用程序中的 HTTP 连接器:
<Set name="forwarded">true</Set>
这将尝试读取代理应该发送的以下标头:
- X-Forwarded-For-客户端的 IP 地址
- X-Forwarded-Host - 客户端在 Host HTTP 请求标头中请求的原始主机
- X-Forwarded-Server-代理服务器的主机名
- X-Forwarded-Proto - 原始请求的 URL 协议方案
如果 Apache 不发送这些标头,并且您的主机无法使其发送这些标头,您可能需要编写自定义连接器,您可以阅读更多相关信息这里。