我有两页:
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应用程序。
答案 0 :(得分:3)
我的问题现已解决。我在这里找到了答案: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"/>
希望它可以帮助遇到相同问题的其他人。
答案 1 :(得分:1)
HttpsMapper使用HttpServletRequest#getServerName()
创建一个绝对URL,您必须在<host>
中添加server.xml
元素的名称。