Назад | Перейти на главную страницу

Страница статической ошибки, обслуживаемая nginx, когда мое приложение не работает

Если мое (Rails) приложение не работает или проходит обслуживание базы данных или что-то еще, я хотел бы указать на уровне nginx для обслуживания статической страницы. Таким образом, каждый URL-адрес вроде http://example.com/* должен обслуживать статический файл html, например /var/www/example/foo.html.

Попытка указать, что в моей конфигурации nginx дает мне припадки, бесконечные циклы и тому подобное.

Я пробую такие вещи как

location / {
  root /var/www/example;
  index foo.html;
  rewrite ^/.+$ foo.html;
}

Как заставить каждый URL в вашем домене обслуживать один статический файл?

Я не уверен на 100%, но если сервер Rails выходит из строя, возникает ошибка 500. Возможно, вы могли бы использовать error_page директива вроде

error_page 500 /staticpage.html

Добавьте два таких места:

location = /foo.htm {
  root /var/www/example;
  index foo.html;
}

location / {
  rewrite ^/.+$ /foo.htm;
}

Используйте именованное местоположение, оно не меняет URI во время перенаправления.

Этот фрагмент обрабатывает ситуацию «рельсы не работают».

error_page 504 @rubydown; # 504 - gateway timeout

location @rubydown {
    internal;
    root /var/www;
    rewrite ^ /504.html break;
}

Для уведомления об обслуживании вы можете использовать что-то подобное в корневом каталоге ...

location / {
    root /var/www;
    try_files /maintaince.html @rails;
}

location @rails {
    internal;
    proxy_pass http://rails.backend;
    # blablabla proxy_pass setting for Rails
}

Создайте файл /var/www/maintaince.html.tmpl, напишите желаемый текст. И перед работой по обслуживанию создайте simlink, похожий на ln -s /var/www/maintaince.html.tmpl /var/www/maintaince.html или просто переименовать файл. После завершения работы по обслуживанию удалите simlink или переименуйте файл обратно.

Следующее должно перенаправить все запросы на /var/www/example/foo.html.

location / {
  root /var/www/example;
  index foo.html;
  # In the following try_files directive, the request will never reach =404.
  try_files /foo.html =404;
}