Если мое (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; }