Настройка пользовательских страниц ошибок Nginx в CentOS 7

Nginx – это высокопроизводительный и гибкий веб-сервер.

При проектировании веб-страниц часто возникает необходимость настроить каждую часть контента, которую будут видеть пользователи, в индивидуальном порядке. Это касается и страниц ошибок, которые возникают в случае, если контент по какой-либо причине недоступен. В этом руководстве показано, как настроить Nginx для отображения пользовательских страниц ошибок в системе CentOS 7.

Требования

Для выполнения данного руководства нужно иметь учётную запись пользователя с привилегиями sudo; подробнее об этом можно узнать в руководстве «Начальная настройка сервера CentOS 7».

Кроме того, нужно предварительно установить Nginx; чтобы получить инструкции по установке данного веб-сервера, читайте эту статью.

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

Для начала нужно создать свою страницу ошибок. Используйте инструкции данного раздела, чтобы создать собственную страницу.

Пользовательские страницы ошибок должны храниться в каталоге /usr/share/nginx/html (это стандартный каталог document root веб-сервера Nginx в системе CentOS). Создайте страницу 404 по имени custom_404.html и одну общую страницу для ошибок с кодом 500 по имени custom_50x.html. Для тестирования можно использовать следующий код; в противном случае рекомендуется заменить текст страницы своим контентом.

echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /usr/share/nginx/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 /usr/share/nginx/html/custom_404.html
echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /usr/share/nginx/html/custom_50x.html
echo "<p>We seem to be having some technical difficulties. Hang tight.</p>" | sudo tee -a /usr/share/nginx/html/custom_50x.html

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

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

Теперь нужно настроить Nginx для поддержки только что созданных страниц при возникновении соответствующей ошибки. Для этого нужно отредактировать виртуальные хосты (Nginx называет их блоками server). В CentOS 7 основной блок server находится в файле /etc/nginx/nginx.conf. В данном руководстве дл примера показано, как отредактировать основной хост; если вы используете другие хосты, выполните инструкции раздела в файлах этих хостов.

sudo nano /etc/nginx/nginx.conf

Внутри файла найдите блок кода, который определяет контекст сервера. Теперь нужно задать Nginx новые страницы ошибок.

Настройка страницы 404

Конфигурационный файл Nginx в системе CentOS определяет страницу 404 при помощи директивы error_page. Нужно изменить поведение сервера, чтобы при возникновении ошибки 404 вместо стандартной страницы появлялась пользовательская. Нужно отредактировать соответствующий блок файла, чтобы убедиться, что директива root указывает на локальную файловую систему и что файл доступен только по внутренним редиректам Nginx (т.е, не может запрашиваться непосредственно клиентами):

/etc/nginx/nginx.conf
http {
. . .
server {
. . .
error_page 404 /custom_404.html;
location = /custom_404.html {
root /usr/share/nginx/html;
internal;
}
. . .
}
}

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

Настройка страницы ошибок 500

Затем можно добавить директивы для обслуживания пользовательской страницы ошибок 500. Это делается точно таким же образом; используйте следующий код:

/etc/nginx/nginx.conf
http {
. . .
server {
. . .
error_page 404 /custom_404.html;
location = /custom_404.html {
root /usr/share/nginx/html;
internal;
}
error_page  500 502 503 504 /custom_50x.html;
location = /custom_50x.html {
root /usr/share/nginx/html;
internal;
}
location /testing {
fastcgi_pass unix:/does/not/exist;
}
}
}

В конце файла добавлен фиктивный путь к FastCGI, чтобы протестировать работу страницы 500. В данном случае возникнет ошибка, поскольку бэкэнда не существует. При запросе страницы на экране появится код ошибки 500 и соответствующая пользовательская страница.

Сохраните и закройте файл.

Перезапуск Nginx и тестирование настроек

Проверьте синтаксис файла на наличие ошибок при помощи команды:

sudo nginx -t

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

sudo systemctl restart nginx

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

http://server_domain_or_IP/thiswillerror

на экране появится страница со следующим сообщением:

Error 404: Not found :-(
I have no idea where that file is, sorry.  Are you sure you typed in the correct URL?

Если запросить местонахождение FastCGI, на экране появится страница ошибки 502 Bad Gateway:

http://server_domain_or_IP/testing
Oops! Something went wrong...
We seem to be having some technical difficulties. Hang tight.

После тестирования удалите фиктивный путь к FastCGI из настроек Nginx.

Заключение

Теперь сервер Nginx обслуживает пользовательские страницы ошибок для сайта. В целом, пользовательские страницы ошибок – это отличный способ помочь посетителям сайта разобраться, в чём дело, предоставить им всю необходимую информацию об ошибке и полезные ссылки (не забудьте убедиться, что ссылки работают даже в случае возникновения ошибок).

Tags: ,

Добавить комментарий