Apache反代实现类似于nginx的try_files效果

2014-11-28 00:05:18

不得不说nginx的try_files实在是好用。

这两天在开发的时候为了解决前后端分离开发导致的跨域问题使用了Apache进行反代,最初是使用

ProxyPass /api/ http://host/api/

这种类型的写法,不过随着api增多,还有些图片以及其他静态文件的调用,ProxyPass写的越来越多,看着烦死了,于是就想简化一下,想到了nginx的try_files。

不过装好了upupw的nginx版之后出现了锁定文件只读状态,导致WebStorm无法保存文件的问题,只有重启nginx才能保存文件,不过浏览器一访问页面,又会保存失败。

放弃了Windows版的nginx后继续看Apache的配置文件,发现Apache的rewrite可以走balancer,于是有了以下写法

<Proxy balancer://host>
 BalancerMember http://behost
</Proxy>
 RewriteEngine On
 RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
 RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
 RewriteRule ^/(.*)$ balancer://host/%{REQUEST_URI} [P,L]

这种写法和nginx的

location / {
try_files $url @be;
}
location @be{
proxy_pass http://host;
}

达到的效果相同,均是在本地找不到文件的时候走反代