Страница статической ошибки, обслуживаемая 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 на вашем домене для обслуживания одного статического файла?

4 ответа

Решение

Добавьте два местоположения как это:

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

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

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

error_page 500 /staticpage.html

Используйте именованное местоположение, это не меняет 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, напишите нужный текст. А перед ведением работ создай симлинк похожий ln -s /var/www/maintaince.html.tmpl /var/www/maintaince.html или просто переименуйте файл. После завершения работы удалите simlink или переименуйте файл обратно.

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

место нахождения / {
  root /var/www/example;
  index foo.html;
  # В следующей директиве try_files запрос никогда не достигнет =404.
  try_files /foo.html =404;
}
Другие вопросы по тегам