Вступление
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
Заключение
Теперь вы должны обслуживать пользовательские страницы ошибок для вашего сайта. Это простой способ персонализировать опыт ваших пользователей, даже если они испытывают проблемы. Одним из предложений для этих страниц является включение ссылок на места, куда они могут обратиться за помощью или дополнительной информацией. Если вы сделаете это, убедитесь, что ссылки назначения доступны даже при возникновении связанных ошибок.