Назад | Перейти на главную страницу

Пользовательский документ ошибок Apache с балансировщиком прокси и RewriteEngine

Я сталкиваюсь с различными проблемами, пытаясь добавить пользовательские документы ErrorDocuments на свой сервер.

Я использую балансировщик прокси для распределения нагрузки между двумя экземплярами Zope и несколько простых правил перезаписи, чтобы сопоставить мой домен с локальными экземплярами zope. Я почти уверен, что Zope не проблема, но упомянули об этом, чтобы объяснить, на что перенаправляет балансировщик.

Я пробовал число предложений, но наиболее близкое, что я могу найти, приведено ниже и приводит к ошибке:

«Firefox обнаружил, что сервер перенаправляет запрос на этот адрес так, что никогда не будет завершен».

Другие варианты приводят к:

"Сервер временно не может обработать ваш запрос из-за простоя из-за технического обслуживания или проблем с производительностью. Повторите попытку позже.

Кроме того, при попытке использовать ErrorDocument для обработки запроса произошла ошибка 503 Service Tempoporary Unavailable ».

Если я включу простой

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

Установив 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"