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

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


Введение

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

Предпосылки

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

Вам также потребуется установить Nginx в вашей системе. Узнайте, как настроить это, следуя этому руководству.

Выполнив вышеуказанные шаги, продолжите работу с этим руководством.

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

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

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

  1. echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /usr/share/nginx/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 /usr/share/nginx/html/custom_404.html
  3. echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /usr/share/nginx/html/custom_50x.html
  4. 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, что он должен использовать эти страницы всякий раз, когда возникают правильные условия ошибки. Откройте файл блока сервера в каталоге /etc/nginx/sites-enabled, который вы хотите настроить. Мы будем использовать файл блока сервера по умолчанию с именем default, но вам следует настроить свои собственные блоки сервера, если вы используете файл не по умолчанию:

  1. sudo nano /etc/nginx/sites-enabled/default

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

Направлять ошибки 404 на пользовательскую страницу 404

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

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        . . .

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

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

Направьте ошибки уровня 500 на пользовательскую страницу 50x

Затем мы можем добавить директивы, чтобы убедиться, что когда Nginx столкнется с ошибками уровня 500 (проблемы, связанные с сервером), он будет обслуживать другую пользовательскую страницу, которую мы создали. Это будет следовать той же самой формуле, которую мы использовали в предыдущем разделе. На этот раз мы установили несколько ошибок уровня 500, чтобы все они использовали страницу custom_50x.html:

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        . . .

        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 и тестирование ваших страниц

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

  1. sudo nginx -t

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

  1. sudo service nginx restart

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

http://server_domain_or_IP/thiswillerror

Когда вы перейдете в место, которое мы настроили для прохода FastCGI, мы получим ошибку 502 Bad Gateway с нашей пользовательской страницей уровня 500:

http://server_domain_or_IP/testing

Теперь вы можете вернуться и удалить поддельное местоположение прохода FastCGI из конфигурации Nginx.

Заключение

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