Apache ProxyPass

我有一个应用程序的下一个结构:

/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的。

如果你这样做的方式,但没有必要改变它。