带有代理平衡器和 RewriteEngine 的自定义 Apache ErrorDocument

带有代理平衡器和 RewriteEngine 的自定义 Apache ErrorDocument

我在尝试将自定义 ErrorDocuments 添加到我的服务器时遇到了各种问题。

我正在使用代理平衡器在两个 Zope 实例之间共享负载,并使用一些简单的重写规则将我的域映射到本地 zope 实例。我很确定 Zope不是问题,但提到它是为了解释平衡器重定向到什么。

我试过数字的建议,但我能得到的“最接近”的建议如下,并导致错误:

“Firefox 检测到服务器正在以永远无法完成的方式重定向此地址的请求。”

其他变化导致:

“由于维护停机或容量问题,服务器暂时无法满足您的请求。请稍后再试。

此外,尝试使用 ErrorDocument 处理请求时遇到 503 服务暂时不可用错误。”

如果我包括一个简单的

错误文档 503 你好

渲染效果很好。

我做错了什么?我担心这可能与平衡器/重写“妨碍”自定义错误有关?或者我的 DocumentRoot 设置不正确?

该配置的其余部分运行良好,没有自定义错误。

<VirtualHost>
  VirtualHost XXX.XXX.XXX.XXX:80>
  ServerAdmin webmaster@localhost
  ServerName sub.domain.com

  <Proxy balancer://domain_dev>
    BalancerMember http://XXX.XXX.XXX.XXX:81
    BalancerMember http://XXX.XXX.XXX.XXX:82
  </Proxy>

  RewriteEngine On
  RewriteRule ^(.*)$ balancer://domain_dev$1 [P,L]

  <Location />
    Order allow,deny
    Allow from all
  </Location>

</VirtualHost>

Listen 81
Listen 82

<VirtualHost XXX.XXX.XXX.XXX:81>
  CustomLog /var/log/apache2/domain-dev-1.log combined
  ErrorLog  /var/log/apache2/domain-dev-error-1.log

  ErrorDocument 503 http://sub.domain.com/custom-errors/customerror.html
  Alias /customerrors /var/www/custom-errors/

  RewriteEngine On
  RewriteRule ^(.*)$ http://localhost:6080/++skin++SandboxSkin/site/++vh++http:sub.domain.com:80/++$1 [P,L]
  RewriteLog /var/log/apache2/domain-dev-rewrite-1.log
  RewriteLogLevel 0


  <Location />
    Order allow,deny
    Allow from all
  </Location>

</VirtualHost>

<VirtualHost XXX.XXX.XXX.XXX:82>
  CustomLog /var/log/apache2/domain-dev-2.log combined
  ErrorLog  /var/log/apache2/domain-dev-error-2.log

  RewriteEngine On
  RewriteRule ^(.*)$ http://localhost:6081/++skin++SandboxSkin/site/++vh++http:sub.domain.com:80/++$1 [P,L]
  RewriteLog /var/log/apache2/domain-dev-rewrite-2.log
  RewriteLogLevel 0

  <Location />
    Order allow,deny
    Allow from all
  </Location>

</VirtualHost>

答案1

设置 LogLevel Debug 我发现:

[Mon Sep 14 19:26:06 2009] [debug] proxy_util.c(2015): proxy: connected /++skin++SandboxSkin/site/++vh++http:sub.domain.com:80/++/custom-errors/customerror.html to localhost:6080

这证实了代理正在尝试从离线服务器位置提供错误。

添加:

RewriteCond %{REQUEST_URI} !^/custom-errors/

停止代理重写请求中使用“custom-errors”目录的任何重定向。

此后,以下简化的 ErrorDocument 规则运行良好:

DocumentRoot "/var/www"
ErrorDocument 503 "/custom-errors/customerror.html"

相关内容