我正在http
端口8080
上运行Tomcat Web服务器。前面有一个处理https
ssl
连接的Apache。
我怎么知道客户是使用http://
还是https://
发出请求的?因为以下内容始终显示http
,因为Apache在内部仅向Tomcat发送http:8080
请求。因此请求的初始方案在这里丢失了。
HttpServletRequest req;
req.getRequestURL().toString(); // always shows http://....
答案 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>