Apache proxypass - 显示本地文件(如果存在)

时间:2016-07-21 12:40:43

标签: apache .htaccess reverse-proxy http-proxy

我使用apache proxypass将内容从其他服务器显示到我的基本服务器

我使用此代码

<VirtualHost *:80>
ServerAdmin webmaster@example.com
DocumentRoot /var/www/html/2
ServerName 2.example.com
ProxyPass /tv http://t1.example.com/tv/
ProxyPassReverse /tv  http://t1.example.com/tv/
ErrorLog logs/errorlive_log
CustomLog logs/access_live common
</VirtualHost>

所以有没有办法首先检查2.example.com上是否存在文件(/ var / www / html / 2)如果文件存在显示来自此服务器并且文件不存在那么请求和服务器来自t1.example的.com / TV /

- 我有第二个问题: 如果server2服务于位于server1和服务器2上的视频正在观看10个用户(10mbps),那么服务器将从服务器2或服务器1获取10mbps,或者两个服务器将负载10mbps

1 个答案:

答案 0 :(得分:2)

在apache doc中,您可以看到Ordering ProxyPass和RewriteRule Directives

在ProxyPass之前评估RewriteRule指令。

因此,您可以添加一个重写规则来测试文件是否存在

<VirtualHost *:80>
ServerAdmin webmaster@example.com
DocumentRoot /var/www/html/2
ServerName 2.example.com

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]

ProxyPass /tv http://t1.example.com/tv/
ProxyPassReverse /tv  http://t1.example.com/tv/
ErrorLog logs/errorlive_log
CustomLog logs/access_live common

</VirtualHost>

如果 %{REQUEST_FILENAME} 是常规文件,则rewiteCond测试然后将rewriteRule重写为该文件。它可以是html,图像,php文件等......

现在,您可以适应您的需求。

修改 对于第二个问题,我忘了回答。对不起,我的坏。

根据Apache mod_proxy文档: “相反,反向代理(或网关)对客户端来说就像普通的Web服务器一样。客户端上不需要特殊配置。客户端在反向代理的命名空间中对内容进行普通请求。然后决定在哪里发送这些请求并返回内容,就像它本身就是原点一样。“

因此,两个服务器都已加载。