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