我有两页:


PageA.html
PageB.html


PageA包含指向PageB的链接,该链接通过以下方式指定:

add(new BookmarkablePageLink<Void>("link", PageB.class, parameters));


只要PageB只是常规的http页面,这就可以很好地工作。 PageA上的链接URL显示为“ http://www.example.com/PageB”。

当我将PageB更改为需要https时,会发生问题,如下所示:

@RequireHttps
public class PageB extends WebPage {
    ...
}


现在,突然,PageA上的链接URL使用本地ip而不是域名,这种方式为“ https://127.0.0.1/PageB”。这意味着我的网站上的访问者无法访问PageB,因为该网址不正确。

当PageB使用“ @RequireHttps”时,它如何在URL中使用本地IP?
我希望网址像以前一样使用域名,并且仅将协议从http更改为https。

我正在Nginx下的Tomcat 7中运行我的Web应用程序。

最佳答案

我的问题现在已经解决。我在这里找到了答案:https://stackoverflow.com/a/32090722/1826061

基本上,我像这样更新了我的nginx配置:

  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP  $remote_addr;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto  $scheme;


然后我将此Valve添加到我的Tomcat配置中:

<Valve className="org.apache.catalina.valves.RemoteIpValve"
       remoteIpHeader="X-Forwarded-For"
       protocolHeader="X-Forwarded-Proto"
       protocolHeaderHttpsValue="https"/>


希望它可以帮助遇到相同问题的其他人。

10-06 14:33