Пользовательская страница Bad Gateway с Nginx

можно ли обслуживать пользовательскую страницу ошибок "плохой шлюз" в Nginx?

похоже на пользовательские 404 страницы.

5 ответов


это похоже на настройку пользовательских 404 страниц. Вот что у меня есть.

#site-wide error pages
error_page 404 /404.html;
error_page 500 502 503 504 /500.html;

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

  1. вы должны создать html-файл с именем что-то вроде "500.html " и поместите его в корень. В случае рельсов, работающих за Nginx, это означает, что он находится на public / 500.формат html.

  2. у вас должна быть строка в файле конфигурации, которая указывает по крайней мере 502 ошибки на этот 500.HTML-страница, как это:

    error_page 502 /500.html;
    
  3. у вас должен быть блок местоположения для /500.HTML в файле config. Если ваш корень уже определен, этот блок может быть пустым. Но блок все равно должен существовать.

    location /500.html{
    }
    

Да, это возможно

введите это в терминале

cd /etc/nginx

sudo nano nginx.conf

и под http добавьте эти строки

    error_page 500 Path_to_your_custom_error_page;
    error_page 503 Path_to_your_custom_error_page;
    error_page 504 Path_to_your_custom_error_page;

Теперь перезапустите nginx, введя следующую команду:

sudo service nginx restart

Bingo теперь вы можете увидеть пользовательское сообщение об ошибке на ошибке шлюза


используя debian (9.3 stretch на самом деле), я сделал следующие шаги:

  • создать /var/www/html/502.html с содержимым для страницы ошибки 502

  • редактировать /etc/nginx/sites-enabled/mywebsite.conf

так это выглядит примерно так:

server {
    listen 80; listen [::]:80;
    server_name www.mywebsite.com;

    error_page 502 /502.html;
    location /502.html {
        root /var/www/html;
    }
}
  • затем перезапустил nginx с помощью service nginx restart

вопрос не говорит, но это довольно часто, чтобы поразить эту проблему, когда API находятся за nginx проходят через прокси, так что в этом случае вы хотите, чтобы ответ был JSON не HTML.

мой любимый подход-просто использовать функцию перенаправления error_page директива для перенаправления обратно на страницу ошибки на том же сайте:

error_page 502 503 $scheme://$server_name/500.json;

это одна строка, вы можете использовать одно и то же 500.json по-разному location, и нет необходимости в таинственной пустой location. Вы размещаете сообщение об ошибке в 500.json файл в корне вашего сайта. Я предполагаю, что у вас уже есть location / {...} директива, которая обслуживает статические файлы.

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