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

Apache proxypass - show local file if exist

我使用 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)如果文件存在则从该服务器显示,如果文件不存在则从 [=22= 请求和服务器].com/tv/

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

在 apache 文档中,您可以查看 Ordering ProxyPass 和 RewriteRule 指令

RewriteRule 指令在 ProxyPass 指令之前被评估。

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

<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>

RewiteCond 测试 %{REQUEST_FILENAME} 是否为常规文件,然后 rewriteRule 重写到文件。它可以是 html、图像、php 文件等...

现在,您可以根据需要进行调整。

编辑 第二个问题忘记回答了。对不起,我的错。

根据 Apache mod_proxy 文档: "A reverse proxy (or gateway), by contrast, appears to the client just like an ordinary web server. No special configuration on the client is necessary. The client makes ordinary requests for content in the namespace of the reverse proxy. The reverse proxy then decides where to send those requests and returns the content as if it were itself the origin."

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