如何在Apache背后的Tomcat中获取真正的http请求?

时间:2018-11-06 16:30:06

标签: java apache tomcat

我正在http端口8080上运行Tomcat Web服务器。前面有一个处理https ssl连接的Apache。

我怎么知道客户是使用http://还是https://发出请求的?因为以下内容始终显示http,因为Apache在内部仅向Tomcat发送http:8080请求。因此请求的初始方案在这里丢失了。

HttpServletRequest req;
req.getRequestURL().toString(); // always shows http://....

1 个答案:

答案 0 :(得分:2)

Apache应该添加以下请求标头,如mod_proxy docs中所述:

  • X-Forwarded-For-客户端的IP地址。

  • X-Forwarded-Host-客户端在Host HTTP请求标头中请求的原始主机。

  • X-Forwarded-Server-代理服务器的主机名。

另外可以添加as explained in this example的原始协议的X-Forwaded-Proto

<VirtualHost *:443>
  <strong>RequestHeader set X-Forwarded-Proto "https"</strong>