Apache2 proxypassreverse 指令附加虚拟主机端口?

Apache2 proxypassreverse 指令附加虚拟主机端口?

我一直在尝试使用 apache 2 mod_proxy 和 proxypass & proxypassreverse 指令来设置反向代理。

我正在安装 WSO2 Identity Server 并希望使用如下 URL 访问该应用程序。

hxxp://myserver.domain.com/wso2/

myserver.domain.com在互联网上访问

在我的网络内部,我已经在我的 apache2 配置中设置了一个虚拟主机,其参数如下:

由于各种原因,端口 80 不可用,虚拟主机必须保持为:8080。

最后,这是我的虚拟主机配置

<VirtualHost *:8080>

  <Location /wso2/>
    ProxyPass hxxps://internal.wso2.node:9443/
    ProxyPassReverse hxxs://internal.wso2.node:9443/
  </Location>

 ProxyVia On
 ProxyPreserveHost Off
 ProxyAddHeaders Off
 ProxyRequests Off
 SSLProxyEngine On
 SSLProxyCheckPeerCN Off

 </VirtualHost>

问题:

我可以使用我的网络浏览器( Firefox / Chrome )请求http://myserver.domain.com/wso2/资源。在我的日志文件中,我看到请求确​​实击中了 apache 服务器,并且虚拟主机捕获了 /wso2/ 位置。

它通过代理并登陆 internal.wso2.node 服务器。但是,产品 WSO2 IS 执行了几次重定向,在日志文件中我看到它请求带有端口的资源。

以下是请求流程

  hxxp://myserver.domain.com/wso2/  -> hxxps://internal.wso2.node:9443/
  REDIRECT x3
  hxxps://internal.wso2.node:8080/carbon -> 
  hxxps://internal.wso2.node:8080/carbon/admin/login.jsp

  Back to my web browser
  hxxp://myserver.domain.com:8080/wso2/carbon/admin/login.jsp

由于某种原因,apache 响应将其虚拟主机附加到我请求的 url 上。

如果我手动删除端口:8080 并在浏览器中再次请求完整 URL,它将可以正常访问资源。但是,任何仅使用以下方式访问的尝试都会失败:http://myserver.domain.com/wso2/将导致重定向和附加端口。

答案1

只要你在执行 ProxyPass 时更改 URI,你可能需要重写 cookie

<VirtualHost *:8080>
    ServerName myserver.domain.com
    ProxyVia On
    ProxyPreserveHost Off
    ProxyAddHeaders Off
    ProxyRequests Off
    SSLProxyEngine On
    SSLProxyCheckPeerCN Off
    ProxyPass /wso2/ https://internal.wso2.node:9443/
    ProxyPassReverse /wso2/ http://myserver.domain.com:8080/
    ProxyPassReverseCookiePath / /wso2
    ProxyPassReverseCookieDomain internal.wso2.node myserver.domain.com
  </VirtualHost>

通常 ProxyPassReverse 有点棘手(至少对我来说),并且可能你需要ProxyPassReverseCookiePath,以防万一ProxyPassReverseCookieDomain(重写你的 cookie 来维持会话)。

相关内容