我目前有 3 台 Web 服务器,它们在 DNS 级别对大型文件进行负载平衡。其中一台是“主”服务器,两台是“从”服务器。
主服务器拥有所需的所有文件,并将文件推送到从服务器。在某些情况下,其中一个或两个从服务器都没有特定文件。在这种情况下,整个过程会放弃,这并不理想。
当从属服务器没有文件时,我希望它将请求重定向到主服务器,以免该过程失败。
我知道我可以使用 ErrorDocuments 来显示自定义错误页面(即使该错误页面位于另一台服务器上,就像这样):ErrorDocument 404 http://master.exmaple.com/404page.html
但是,我希望它从主服务器提供文件,而不是错误页面。
在我看来,这可以通过类似的东西来实现,ErrorDocument 404 http://master.example.com/{{requested_file}}
但我不知道这样的事情是否有可能。
我觉得我这里漏掉了一些简单的东西。有人能给我指出正确的方向吗?
Apache 2.4.7 在 Ubuntu 14.04 上运行
谢谢。
答案1
您可以使用 ErrorDocuments 和 mod_rewrite 的组合来实现这一点
所以你的 ErrorDocument 应该是
ErrorDocument 404 /not_found_redirect/
因此,当找不到文档时,服务器会重定向到本地 URL。诀窍是将许多环境变量传递到重定向的 URL(http://httpd.apache.org/docs/current/custom-error.html#variables)。REDIRECT_REQUEST_URI 应该是您想要的那个。
因为在 mod_rewrite 中,你使用环境变量重定向到主服务器
RewriteEngine On
RewriteRule ^/not_found_redirect/ http://master.example.com%{REDIRECT_REQUEST_URI} [R,L]
并且浏览器应该被发送到主服务器上的正确位置。