我已经在我的 websphere 8 应用程序服务器前面配置了安全的 apache 反向代理。我已经设置了通用 JVM 参数 -Dhttps.proxyHost 和 -Dhttps.proxyPort 但 response.sendRedirect 上的请求不会定向到 peoxy 服务器。它定向到默认端口 9080。 如何解决这个问题? 我已经通过修改我的连接器端口解决了 Tomcat 和 Jboss 上的这个问题,如下所示
连接器名称=“http”协议=“HTTP/1.1”套接字绑定=“http”方案=“https”代理名称=“192.168.1.1”代理端口=“443”安全=“true”
如何为 Websphere 解决此问题?
按照以下步骤解决了这个问题。
在 Apache Web 服务器的虚拟主机标签中添加以下内容。您实际需要的是沿着用于访问服务器的协议进行转发。
虚拟主机*:443> RequestHeader 设置 X-Forwarded-Proto "https" …… /虚拟主机>
更多说明请参阅网站 https://www.nczonline.net/blog/2012/08/08/setting-up-apache-as-a-ssl-front-end-for-play/
httpsIndicatorHeader - X-Forwarded-Proto(在 Web 服务器中设置的请求标头值(在我们的示例中为 https))
com.ibm.ws.webcontainer.extractHostHeaderPort - true(服从请求端口号)
trusthostheaderport - true(服从请求端口号)
参考以下网站进行此设置
我假设你正在使用如下
response.sendRedirect(request.getContextPath() + “/my/main.jsp”);
这里 - request.getContextPath 提供代理服务器信息。
作为快速修复,我使用属性文件中的代理服务器值解决了该问题。
response.sendRedirect("从 prop 文件中获取代理服务器名称" + “/my/main.jsp”);
在我们的示例中(Websphere Liberty 21.0.0.9),我们只是在相应的 Apache 虚拟主机配置中添加了几个指令:
这些指令仅从 Apache 2.3.3 起有效
@Darshan Shah 在下面提到的文章中提到了两者
在我们的案例中,Liberty 位于 IBM i 集成 Web 服务 (IWS) 后面并在不同端口上运行,因此我们没有添加选项
com.ibm.ws.webcontainer.extractHostHeaderPort -true
trusthostheaderport - true
基于 Open Liberty 文档,我们唯一的选择是在反向代理处添加以下标头
X-Forwarded-Proto: https
X-Forwarded-Port: 443
以及将其设置为在
X-Forwarded-Host
标头中保留主机。这是使用 Apache mod-proxy 上的 ProxyPreserveHost On
实现的,但其他人可能会默认这样做。
Apache mod 代理配置
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
ProxyPreserveHost On