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

Вступление

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

Предпосылки

Чтобы начать работу с этим руководством, вам понадобится пользователь без полномочий root с правами + sudo +. Вы можете настроить пользователя этого типа, следуя нашему https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 руководстве по настройке местах для Ubuntu 14.04] , Вам также необходимо установить Apache в вашей системе. Узнайте, как настроить это, следуя первому шагу https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-14- 04 [это руководство].

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

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

Мы разместим наши пользовательские страницы ошибок в каталоге + / var / www / html, где установка Ubuntu 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 / apache2 / sites-enabled +, который вы хотите настроить. Мы будем использовать файл блока сервера по умолчанию, называемый + 000-default.conf +, но вы должны настроить свои собственные блоки сервера, если вы используете файл не по умолчанию:

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

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

Прямые ошибки на правильных пользовательских страницах

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

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

/etc/apache2/sites-enabled/000-default.conf

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

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






</VirtualHost>

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

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

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

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

/etc/apache2/sites-enabled/000-default.conf

<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












</VirtualHost>

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

Настроить тестирование на 500-уровневые ошибки

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

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

/etc/apache2/sites-enabled/000-default.conf

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

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

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

sudo a2enmod proxy
sudo a2enmod proxy_http

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

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

sudo apache2ctl configtest

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

sudo service apache2 restart

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

http:///thiswillerror

изображение: https: //assets.digitalocean.com/articles/nginx_custom_error_1404/custom_404.png [настраиваемый apache 404]

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

http:///proxytest

изображение: https: //assets.digitalocean.com/articles/nginx_custom_error_1404/custom_50x.png [пользовательский apache 50x]

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

sudo a2dismod proxy
sudo a2dismod proxy_http

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

sudo service apache2 restart

Заключение

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

Related