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

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

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

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

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

在我的networking内部,我使用以下参数设置了在我的apache2configuration中运行的虚拟主机:

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

最后,这是我的虚拟主机configuration

 <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将执行几个redirect,在日志文件中,我看到它请求带有端口的资源。

这是请求stream程

  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/进行访问的任何尝试都将导致redirect和附加的端口。

只要你在做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是有点棘手(至less对我来说),可能你会需要ProxyPassReverseCookiePath ,以防万一ProxyPassReverseCookieDomain (重写你的cookies来维护会话)。