我有两页:
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"/>
希望它可以帮助遇到相同问题的其他人。