使用https

时间:2018-06-20 16:14:25

标签: java apache nginx https wicket

我有两页:

  • 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应用程序。

2 个答案:

答案 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元素的名称。