Как решить добавить пользовательскую страницу ошибки 503 html на ubuntu apache2, используя ее с mod_jk и перенаправлением виртуального хоста на tomcat

Я попробовал все, что нашел в документации Apache, и другие предложения, найденные в stackoverflow и блогах. Когда я добавляю следующую строку в любой файл конфигурации, такой как /etc/apache2/apache2.conf или /etc/apache2/conf.d/localized-error-pages или /etc/apache2/httpd.conf или /etc/apache2/sites-enabled/000-default:

ErrorDocument 503 "This is an error msg" или даже HTML-сообщение ErrorDocument 503 "<h1> This is an error message </h1> или перенаправление внешнего URL-адреса ErrorDocument 503 http://www.google.com это работает.

Но когда я пытаюсь выполнить внутреннюю переадресацию, например ErrorDocument 503 /ERROR_503.html или ErrorDocument 503 /error/ERROR_503.html, я получаю сообщение по умолчанию с последней строкой:

Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 503 «Временно недоступна служба».

Я попытался поместить страницу ошибки html в DocumentRoot var/www, в var/www/error. Попробуйте раскомментировать весь файл /etc/apache2/conf.d/localized-error-pages, который устанавливает все ошибки для пользовательских страниц с интернационализацией, которые находятся в /usr/share/apache2/error. И поскольку сообщения внутри этих файлов такие же, как и по умолчанию, строка

Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 503 «Временно недоступна служба». больше не показывается. Но если я изменю строку

`ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var`

в файле локализованных страниц ошибок на новый html, размещенный на той же странице, ошибка возвращается, и страница не отображается. Если я отредактирую файл HTTP_SERVICE_UNAVAILABLE.html.var, ничего не изменится и в сообщении браузера.

Еще немного информации: я использую apache2 только для перенаправления всех запросов на порт 80 на tomcat через порт 8089 через работника. Мои файлы конфигурации: https://dl.dropboxusercontent.com/u/1105054/apache.zip


person Danilo Marques    schedule 21.10.2014    source источник


Ответы (3)


Это заняло у меня слишком много времени (частично из-за правописания), но я решил опубликовать весь файл виртуального хоста, поскольку он может быть полезен.

Вам нужно убедиться, что вы указали DocumentRoot и что вы делаете ProxyPass /file.html ! перед вашим основным ProxyPass /.

<VirtualHost *:443>
    DocumentRoot /var/www/html
    #ProxyPreserveHost On

    <IfModule env_module>
         # Fake SSL if Loadbalancer does SSL-Offload 
         SetEnvIf Front-End-Https "^on$" HTTPS=on
    </IfModule>

    SSLEngine on
    SSLCertificateFile file
    SSLCertificateKeyFile file
    SSLCertificateChainFile file

    ProxyPass /maintenance-message.html !
    ProxyPass /maintance-message_files !
    ProxyPass / "ajp://localhost:8009/"
    ProxyPassReverse / "ajp://localhost:8009/"
    ServerName server.something.com:443
    ErrorDocument 503 /maintenance-message.html
</VirtualHost>
person Loren    schedule 31.03.2016
comment
После нескольких часов поиска и ничего не найдя! Спасибо! Мне не хватало ProxyPass /maintenance-message.html!. Все еще не знаю, что такое '!' делает, но кого это волнует?! оно работает! - person Merv; 05.01.2019
comment
Если я правильно помню, он исключит файл maintenance-message.html из проксирования и вместо этого будет обслуживать его из /var/www/html. (Таким образом, ! инвертирует команду, чтобы сказать, что этот файл или папка не должны передаваться через прокси-сервер.) - person Loren; 05.01.2019
comment
Да, я понял это в конце концов. Спасибо! - person Merv; 07.01.2019

В моем случае я просто добавил эту строку ProxyPass в конфигурацию моего виртуального сервера:

ProxyPass /serverError.html !
ErrorDocument 503 /serverError.html

Это говорит прокси перейти к DocumentRoot и искать страницу с ошибкой.

Также вам может пригодиться этот ответ: https://stackoverflow.com/a/13019667

person David Quirós    schedule 06.01.2015

Я тоже столкнулся с той же проблемой, и после глубоких поисков я нашел здесь лучшее (и единственное?) решение от @Loren.

Работало после установки ProxyPass /file.html ! до основного ProxyPass / и НЕ после. Также необходим DocumentRoot.

person pol92    schedule 27.08.2019