我有一个应用程序的下一个结构:
/application (html files) /application/css (css files) /application/img (images) /application/classes -> I want this to redirect to a application server (JBoss)
我该如何configurationapache?
为什么不工作,如果我这样做:
ProxyPreserveHost On ProxyPass /application ! ProxyPass /application/css ! ProxyPass /application/img ! ProxyPass /application/classes http://jboss_server:8080/ ProxyPassReverse /application/classes http://jboss_server:8080
确保服务器具有相同的结构!
ProxyPass /application/classes http://jboss_server:8080/application/classes ProxyPassReverse /application/classes http://jboss_server:8080/application/classes
您不必使用其他proxypass值,因为“ 类 ”在“ 应用程序 ”下面! 因此,只有在使用/application/classes时才会调用代理,而不是在使用/application/img调用。
我认为你的语法有点不对。 它应该是:
ProxyPass /mirror/foo/ http://foo.com/
也许是这样的:
ProxyPass / http://sso.domain.com/ ProxyPassReverse / http://sso.domain.com/
我使用mod_rewrite – 这给了更多的权力。
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/server-info RewriteCond %{REQUEST_URI} !^/server-status RewriteRule ^/application/classes(.*) http://jboss_server:8080/$1 [P,L,NS]
第一行将使HTTPd服务于任何可以在DOCUMENT_ROOT中find的请求文件,而不需要将请求附加到应用服务器。 我在Web服务器上部署了一组单独的静态文件。
另外两行将阻止HTTPd服务器页面被代理,因此它们将由HTTPd提供服务。 您可以添加更多的这些exception,以便可以通过HTTPd进行处理。
指令ProxyPreserveHost和ProxyPassReverse在这种情况下也可能有用。
使用AJP协议可能会更好地实现,而不是使用TCP端口8080,使用mod_proxy_ajp和以下规则:
<Location /> ProxyPass ajp://jboss_server:8009/ ProxyPassReverse ajp://jboss_server:8009/ </Location>
当然,这需要你在JBoss的Tomcat服务器上启用AJP协议,我认为这是默认closures的。
如果你这样做的方式,但没有必要改变它。