Поиск по сайту:

Как настроить Apache для использования пользовательских страниц ошибок в Ubuntu 14.04


Введение

Apache — самый популярный веб-сервер в мире. Он хорошо поддерживается, многофункционален и гибок. При разработке веб-страниц часто полезно настроить каждую часть контента, которую увидят ваши пользователи. Это включает в себя страницы ошибок, когда они запрашивают контент, который недоступен. В этом руководстве мы покажем, как настроить Apache для использования пользовательских страниц ошибок в Ubuntu 14.04.

Предпосылки

Чтобы начать работу с этим руководством, вам понадобится пользователь без полномочий root с привилегиями sudo. Вы можете настроить пользователя этого типа, следуя нашему руководству.

Создание собственных страниц ошибок

Мы создадим несколько пользовательских страниц ошибок для демонстрационных целей, но ваши пользовательские страницы, очевидно, будут отличаться.

Мы поместим наши пользовательские страницы ошибок в каталог /var/www/html, где установка Apache Ubuntu устанавливает корневой каталог документа по умолчанию. Мы создадим страницу для ошибок 404 с именем custom_404.html и одну для общих ошибок уровня 500 с именем custom_50x.html. Вы можете использовать следующие строки, если вы просто тестируете. В противном случае поместите свой собственный контент в эти места:

  1. echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /var/www/html/custom_404.html
  2. 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
  3. echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /var/www/html/custom_50x.html
  4. 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/apache2/sites-enabled, который вы хотите настроить. Мы будем использовать файл блока сервера по умолчанию с именем 000-default.conf, но вам следует настроить свои собственные блоки сервера, если вы используете файл не по умолчанию:

  1. sudo nano /etc/apache2/sites-enabled/000-default.conf

Теперь мы можем указать Apache на наши пользовательские страницы ошибок.

Направляйте ошибки на правильные пользовательские страницы

Мы можем использовать директиву ErrorDocument, чтобы связать каждый тип ошибки с соответствующей страницей ошибки. Это может быть установлено в виртуальном хосте, который в настоящее время определен. По сути, нам просто нужно сопоставить код состояния http для каждой ошибки со страницей, которую мы хотим обслуживать, когда она возникает.

Для нашего примера отображение ошибок будет выглядеть так:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    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
</VirtualHost>

Одного этого изменения достаточно для обслуживания пользовательских страниц ошибок при возникновении указанных ошибок.

Однако мы добавим дополнительный набор конфигураций, чтобы наши страницы ошибок не могли запрашиваться клиентами напрямую. Это может предотвратить некоторые странные ситуации, когда текст страницы ссылается на ошибку, но статус http равен «200» (указывает на успешный запрос).

Отвечать кодом 404 при прямом запросе страниц с ошибками

Чтобы реализовать это поведение, нам нужно добавить блок Files для каждой из наших пользовательских страниц. Внутри мы можем проверить, установлена ли переменная окружения REDIRECT_STATUS. Это должно быть установлено только тогда, когда директива ErrorDocument обрабатывает запрос. Если переменная окружения пуста, мы выдадим ошибку 404:

<VirtualHost *:80>

    . . .

    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>
</VirtualHost>

Когда страницы ошибок запрашиваются непосредственно клиентами, возникает ошибка 404, поскольку не установлена правильная переменная среды.

Настройте тестирование на наличие ошибок уровня 500

Мы можем легко создать ошибку 404 для проверки нашей конфигурации, запросив несуществующий контент. Чтобы проверить ошибки уровня 500, нам нужно настроить фиктивный прокси-проход, чтобы мы могли гарантировать, что возвращаются правильные страницы.

Добавьте директиву ProxyPass внизу виртуального хоста. Отправьте запросы на /proxytest на порт 9000 на локальном компьютере (где не запущена служба):

<VirtualHost *:80>

    . . .

    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"
</VirtualHost>

Сохраните и закройте файл, когда закончите.

Теперь включите модули mod_proxy и mod_proxy_http, набрав:

  1. sudo a2enmod proxy
  2. sudo a2enmod proxy_http

Перезапуск Apache и тестирование ваших страниц

Проверьте файл конфигурации на наличие синтаксических ошибок, набрав:

  1. sudo apache2ctl configtest

Решайте любые проблемы, о которых сообщается. Когда ваши файлы не содержат синтаксических ошибок, перезапустите Apache, набрав:

  1. sudo service apache2 restart

Теперь, когда вы переходите на домен или IP-адрес вашего сервера и запрашиваете несуществующий файл, вы должны увидеть страницу 404, которую мы создали:

http://server_domain_or_IP/thiswillerror

Когда вы перейдете в место, которое мы настроили для фиктивного прокси-пропуска, мы получим ошибку «503 сервис недоступен» с нашей пользовательской страницей уровня 500:

http://server_domain_or_IP/proxytest

Теперь вы можете вернуться и удалить фальшивую строку доступа к прокси-серверу из конфигурации Apache. Вы можете отключить прокси-модули, если вам не нужно их использовать где-либо еще:

  1. sudo a2dismod proxy
  2. sudo a2dismod proxy_http

Перезапустите сервер еще раз, чтобы применить эти изменения:

  1. sudo service apache2 restart

Заключение

Теперь вы должны обслуживать настраиваемые страницы ошибок для своего сайта. Это простой способ персонализировать работу пользователей, даже если у них возникают проблемы. Одним из предложений для этих страниц является размещение ссылок на места, где они могут получить помощь или дополнительную информацию. Если вы сделаете это, убедитесь, что адресаты ссылок доступны даже при возникновении соответствующих ошибок.