我一直在尝试使用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来维护会话)。