2011-10-24 49 views
3

我有一个Apache/Passenger组合服务Rails 3.x和相同的组合服务Rails 2.x通过反向代理Passenger Standalone。我这样做的原因是因为Rails 2.x使用比Ruby/Passenger使用的Ruby更旧的Ruby版本。Apache反向代理可以排除某些文件类型吗?

然而,在Rails 2.x应用程序中有一些Passenger Standalone不支持的应用程序。 (由黎红丽在乘客讨论小组确认)。 Hongli建议排除反向代理中的'php'位。

可以这样做,如果是的话如何?


编辑说明如何使用反向代理服务器已经设置:

<VirtualHost *:80> 
    ServerName gtt 
    DocumentRoot /home/purvez/www/gtt/public 
    RailsEnv development 
    PassengerEnabled off 
    ProxyPass/http://127.0.0.1:3000/ 
    ProxyPassReverse/http://127.0.0.1:3000/ 
</VirtualHost> 

还怎么一个普通的网站已经成立:

<VirtualHost *:80> 
    ServerName testapp 
    DocumentRoot /home/purvez/www/testapp/public 
    RailsEnv development 
</VirtualHost> 

回答

7

你可以使用ProxyPassMatch排除,如下:

<VirtualHost *:80> 
    ServerName gtt 
    DocumentRoot /home/purvez/www/gtt/public 
    RailsEnv development 
    PassengerEnabled off 
    ProxyPassMatch .*\.php$ ! 
    ProxyPass/http://127.0.0.1:3000/ 
    ProxyPassReverse/http://127.0.0.1:3000/ 
</VirtualHost> 

请注意,这会导致名为gtt的虚拟主机中的所有'php位'从/home/purvez/www/gtt/public在本地提供服务。

希望这能让你朝着正确的方向前进。

+0

现在这就是我喜欢的答案!非常感谢。就我的知识而言,请您解释ProxyPassMatch实际执行的内容后的字符。我猜他们是RegExs,但我不完全确定。再次感谢。 – nexar

+0

@nexar:[apache文档](http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypassmatch)可能比我更好地解释它。 –