Настройка пользовательских страниц ошибок Apache в CentOS 7
Centos, Cloud Server, VPS | Комментировать запись
Apache – самый популярный в мире веб-сервер; многофункциональный и гибкий, он постоянно развивается и поддерживается командой высококвалифицированных специалистов.
При проектировании веб-страниц часто возникает необходимость настроить каждую страницу индивидуально. Это касается и страниц ошибок, которые появляются, если запрашиваемый контент по какой-либо причине недоступен. В этом руководстве показано, как настроить Apache для отображения пользовательских страниц ошибок в системе CentOS 7.
Требования
Для выполнения данного руководства нужна уётная запись пользователя с привилегиями sudo. Чтобы настроить такого пользователя, обратитесь к этому руководству. Кроме того, нужно предварительно установить Apache; подробные инструкции по установке веб-сервера можно получить здесь.
Создание пользовательской страницы ошибок
Для начала создайте пользовательские страницы ошибок.
Примечание: Для тестирования можно использовать следующий код без изменений. Чтобы создать свою страницу ошибок, просто замените текст в echo в приведённом ниже коде.
Страницы ошибок будут находиться в каталоге /var/www/html – стандартном каталоге document root веб-сервера Apache. Для примера создайте страницу ошибки 404 (по имени custom_404.html) и общую страницу для ошибок 500 (назовите её custom_50x.html).
echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /var/www/html/custom_404.html
echo "<p>I have no idea where that file is, sorry. Are you sure you typed in the correct URL?</p>" | sudo tee -a /var/www/html/custom_404.html
echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /var/www/html/custom_50x.html
echo "<p>We seem to be having some technical difficulties. Hang tight.</p>" | sudo tee -a /var/www/html/custom_50x.html
Итак, теперь на сервере есть две страницы ошибок.
Настройка Apache для отображения пользовательских страниц ошибок
Теперь нужно настроить Apache для поддержки только что созданных страниц в случае возникновения соответствующей ошибки. Создайте новый конфигурационный файл в каталоге /etc/httpd/conf.d, который хранит настройки для Apache. Назовите файл custom_errors.conf:
sudo nano /etc/httpd/conf.d/custom_errors.conf
Направьте Apache на соответствующие страницы ошибок.
Для того чтобы связать каждый тип ошибки со специальной страницей ошибок, используйте директиву ErrorDocument. В целом, нужно просто указать код состояния HTTP для каждой страницы, и тогда страница появится на экране в случае возникновения указанной ошибки.
В данном случае настройки будут выглядеть так:
/etc/httpd/conf.d/custom_errors.conf
ErrorDocument 404 /custom_404.html
ErrorDocument 500 /custom_50x.html
ErrorDocument 502 /custom_50x.html
ErrorDocument 503 /custom_50x.html
ErrorDocument 504 /custom_50x.html
Этих настроек достаточно, чтобы обслуживать пользовательские страницы ошибок.
Однако рекомендуется добавить ещё один блок конфигураций, чтобы клиенты не могли запрашивать страницы ошибок напрямую. Это предотвратит путаницу (например, запрошенная напрямую страница ошибки будет сообщать пользователю об ошибке, даже если код состояния – 200 (Success)).
Чтобы настроить такое поведение веб-сервера, нужно добавить блок Files для каждой пользовательской страницы ошибок. Также нужно проверить, установлена ли переменная окружения REDIRECT_STATUS; она должна быть установлена только если директива ErrorDocument обрабатывает запрос. Если переменная окружения пуста, сервер будет обслуживать страницу 404:
/etc/httpd/conf.d/custom_errors.conf
ErrorDocument 404 /custom_404.html
ErrorDocument 500 /custom_50x.html
ErrorDocument 502 /custom_50x.html
ErrorDocument 503 /custom_50x.html
ErrorDocument 504 /custom_50x.html
<Files "custom_404.html">
<If "-z %{ENV:REDIRECT_STATUS}">
RedirectMatch 404 ^/custom_404.html$
</If>
</Files>
<Files "custom_50x.html">
<If "-z %{ENV:REDIRECT_STATUS}">
RedirectMatch 404 ^/custom_50x.html$
</If>
</Files>
Когда страницы ошибок запрашиваются клиентами, возникает ошибка 404, потому что переменная среды не установлена.
Тестирование страницы ошибок 500
Проверить работу страницы ошибок 404 очень просто: нужно запросить любой несуществующий контент. Чтобы протестировать страниц ошибок 500, нужно создать фиктивный ProxyPass.
Добавьте директиву ProxyPass в конец конфигурационного файла. Отправьте запросы для /proxytest на порт 9000 на локальной машине (на этом порте не запущено ни одного сервиса):
/etc/httpd/conf.d/custom_errors.conf
ErrorDocument 404 /custom_404.html
ErrorDocument 500 /custom_50x.html
ErrorDocument 502 /custom_50x.html
ErrorDocument 503 /custom_50x.html
ErrorDocument 504 /custom_50x.html
<Files "custom_404.html">
<If "-z %{ENV:REDIRECT_STATUS}">
RedirectMatch 404 ^/custom_404.html$
</If>
</Files>
<Files "custom_50x.html">
<If "-z %{ENV:REDIRECT_STATUS}">
RedirectMatch 404 ^/custom_50x.html$
</If>
</Files>
ProxyPass /proxytest "http://localhost:9000"
Сохраните и закройте файл.
Тестирование страниц ошибок
Проверьте конфигурационный файл на наличие ошибок:
sudo apachectl configtest
Если команда обнаружила любые ошибки, исправьте их. После этого перезапустите Apache:
sudo systemctl restart httpd
Откройте домен или IP-адрес сервера и запросите несуществующий контент, чтобы проверить работу страницы 404:
http://server_domain_or_IP/thiswillerror
На экране должна появиться страница 404:
Error 404: Not found :-(
I have no idea where that file is, sorry. Are you sure you typed in the correct URL?
Откройте фиктивный proxypass, чтобы проверить работу страницы 500 (на экране должен появиться код состояния 503 service unavailable):
http://server_domain_or_IP/proxytest
Если всё настроено верно, на экране появится:
Oops! Something went wrong...
We seem to be having some technical difficulties. Hang tight.
После тестирования удалите фиктивную директиву из конфигураций Apache.
Заключение
Итак, теперь на сайте есть уникальные страницы ошибок. Пользовательские страницы ошибок – это отличный способ помочь посетителям понять, в чём дело, предоставить им всю необходимую информацию об ошибке и полезные ссылки (не забудьте убедиться, что ссылки работают даже в случае возникновения ошибок).
Tags: Apache, CentOS 7