Как настроить пользовательскую страницу ошибок 503 в NGINX?
Я узнал, как заставить NGINX возвращать страницы ошибок клиентов 503
,
но я не могу узнать, как сделать следующее:
Пример конфигурационного файла:
location / {
root www;
index index.php;
try_files /503.html =503;
}
error_page 503 /503.html;
location = /503.html {
root www;
}
Как вы можете видеть, в соответствии с приведенным выше кодом, если в корневом каталоге находится страница с именем 503.html
, сайт вернет эту страницу пользователю.
Но кажется, что хотя код выше работает, когда кто-то просто посещает мой сайт, набрав
он не захватывает запросы вроде:
С моим кодом пользователь все еще может видеть страницу профиля или любые другие страницы, кроме index.php
.
Вопрос:
Как привязать запросы ко всем страницам моего сайта и пересылать их на 503.html
, когда 503.html
присутствует в моей корневой папке?
Ответы
Ответ 1
Обновлено: изменено "если -f" на "try_files".
Попробуйте следующее:
server {
listen 80;
server_name mysite.com;
root /var/www/mysite.com/;
location / {
try_files /maintenance.html $uri $uri/ @maintenance;
# When maintenance ends, just mv maintenance.html from $root
... # the rest of your config goes here
}
location @maintenance {
return 503;
}
}
Дополнительная информация:
https://serverfault.com/questions/18994/nginx-best-practices
http://wiki.nginx.org/HttpCoreModule#try_files
Ответ 2
Нижеследующая конфигурация работает для близкого к последнему стабильному nginx 1.2.4
.
Я не мог найти способ включить страницу обслуживания с помощью if
, но, по-видимому, согласно IfIsEvil, это нормально if
.
- Чтобы включить обслуживание
touch /srv/sites/blah/public/maintenance.enable
. Вы можете rm
отключить файл.
- Ошибка
502
будет сопоставлена с 503
, чего хочет большинство людей. Вы не хотите предоставлять Google 502
.
- Пользовательские
502
и 503
страницы. Ваше приложение будет генерировать другие страницы ошибок.
В Интернете существуют другие конфигурации, но они, похоже, не работают с последним nginx.
server {
listen 80;
server_name blah.com;
access_log /srv/sites/blah/logs/access.log;
error_log /srv/sites/blah/logs/error.log;
root /srv/sites/blah/public/;
index index.html;
location / {
if (-f $document_root/maintenance.enable) {
return 503;
}
try_files /override.html @tomcat;
}
location = /502.html {
}
location @maintenance {
rewrite ^(.*)$ /maintenance.html break;
}
error_page 503 @maintenance;
error_page 502 =503 /502.html;
location @tomcat {
client_max_body_size 50M;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-Proto http;
proxy_pass http://tomcat;
proxy_redirect off;
}
}
Ответ 3
Другие ответы правильны, но просто добавьте, что если вы используете внутренние прокси, вам также нужно добавить proxy_intercept_errors on;
на один из ваших прокси-серверов.
Итак, например...
proxy_intercept_errors on;
root /var/www/site.com/public;
error_page 503 @503;
location @503 {
rewrite ^(.*)$ /scripts/503.html break;
}