Как я могу настроить пользовательскую страницу ошибки 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
присутствует в моей корневой папке?
3 ответа
Приведенная ниже конфигурация работает близко к последней стабильной версии nginx. 1.2.4
, Я не мог найти способ включить страницу обслуживания без использования if
но, по-видимому, согласно IfIsEvil это нормально if
,
- Чтобы включить обслуживание
touch /srv/sites/blah/public/maintenance.enable
, Вы можетеrm
файл для отключения. - ошибка
502
будет сопоставлен с503
это то, что большинство людей хотят. Вы не хотите давать Google502
, - изготовленный на заказ
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;
}
}
Обновлено: изменено "if -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
Другие ответы верны, но просто добавим, что если вы используете внутренние прокси, вам также нужно добавить 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;
}
Спустя годы вот что я использую в настоящее время для полностью настраиваемых сообщений об ошибках.
Страницы ошибок HTML хранятся в каталоге /http-error, расположенном в корневом каталоге вашего сайта.
Я создал руководство по быстрой установке NGINX PHP-FPM на сайте https://www.npo.run/, где вы можете узнать, как развернуть сервер, загрузить готовые к использованию шаблоны страниц ошибок и многое другое.
###### ##### ##### #### ##### ##### ## #### ###### ####
# # # # # # # # # # # # # # # # #
##### # # # # # # # # # # # # # ##### ####
# ##### ##### # # ##### ##### ###### # ### # #
# # # # # # # # # # # # # # # # #
###### # # # # #### # # # # # #### ###### ####
# ------------------------------------------------------------------------------
# HTTP > SERVER > ERROR_PAGE :: WWW.EXAMPLE1.COM
# ------------------------------------------------------------------------------
# Optionally include these error pages as a file.
# include /etc/nginx/conf.d/www.example1.com_error_page.conf;
# ------------------------------------------------------------------------------
# Description
# Defines the URI that will be shown for the specified errors.
#
# ------------------------------------------------------------------------------
#
#
# 400 Bad Request
error_page 400 @400;
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# An http 400 error must be returned in this manner for custom http error pages to be served correctly.
location @400 {
rewrite ^(.*)$ /http-error/400-error.html break;
}
# 401 Unauthorized
error_page 401 @401;
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# An http 401 error must be returned in this manner for custom http error pages to be served correctly.
location @401 {
rewrite ^(.*)$ /http-error/401-error.html break;
}
# 403 Forbidden
error_page 403 @403;
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# An http 403 error must be returned in this manner for custom http error pages to be served correctly.
location @403 {
rewrite ^(.*)$ /http-error/403-error.html break;
}
# 404 Not Found
error_page 404 @404;
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# An http 404 error must be returned in this manner for custom http error pages to be served correctly.
location @404 {
rewrite ^(.*)$ /http-error/404-error.html break;
}
# 405 Method Not Allowed
# unreachable do to nature of the error itself. here only for completeness.
# error_page 405 /http-error/405-error.html break;
# Request Timeout
error_page 408 @408;
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# An http 408 error must be returned in this manner for custom http error pages to be served correctly.
location @408 {
rewrite ^(.*)$ /http-error/408-error.html break;
}
# 500 Internal Server Error
error_page 500 @500;
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# An http 500 error must be returned in this manner for custom http error pages to be served correctly.
location @500 {
rewrite ^(.*)$ /http-error/500-error.html break;
}
# 502 Bad Gateway
error_page 502 @502;
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# An http 502 error must be returned in this manner for custom http error pages to be served correctly.
location @502 {
rewrite ^(.*)$ /http-error/502-error.html break;
}
# 503 Service Unavailable
error_page 503 @503;
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# An http 503 error must be returned in this manner for custom http error pages to be served correctly.
location @503 {
rewrite ^(.*)$ /http-error/503-error.html break;
}
# 504 Gateway Time-out
error_page 504 @504;
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# An http 504 error must be returned in this manner for custom http error pages to be served correctly.
location @504 {
rewrite ^(.*)$ /http-error/504-error.html break;
}
# 505 HTTP Version Not Supported
error_page 505 @505;
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# An http 505 error must be returned in this manner for custom http error pages to be served correctly.
location @505 {
rewrite ^(.*)$ /http-error/505-error.html break;
}
# 511 HTTP Version Not Supported
error_page 511 @511;
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# An http 511 error must be returned in this manner for custom http error pages to be served correctly.
location @511 {
rewrite ^(.*)$ /http-error/511-error.html break;
}
# #### #### ## ##### # #### # #
# # # # # # # # # # # ## #
# # # # # # # # # # # # #
# # # # ###### # # # # # # #
# # # # # # # # # # # # ##
###### #### #### # # # # #### # #
# example1.com internal error pages located at...
location /http-error/ {
# Specifies that a given location can only be used for internal requests.
# returns a 404 Not Found http error if accessed directly.
internal;
}