16

我学会了如何让 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

4

4 回答 4

11

以下配置适用于接近最新稳定的 nginx 1.2.4。我找不到不使用 an 来启用维护页面的方法,if但显然根据IfIsEvil它是可以的if

  • 启用维护touch /srv/sites/blah/public/maintenance.enable。您可以rm将该文件禁用。
  • 错误502将映射到503大多数人想要的。您不想给 Google 一个502.
  • 自定义502503页面。您的应用将生成其他错误页面。

网上还有其他配置,但它们似乎不适用于最新的 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;
    }
}
于 2013-01-28T14:58:52.453 回答
8

更新:将“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

http://wiki.nginx.org/HttpCoreModule#try_files

于 2011-04-09T11:45:37.150 回答
7

其他答案都是正确的,但只是补充一点,如果您使用内部代理,您还需要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;
    }
于 2013-07-09T19:01:43.150 回答
1

多年后,这是我目前用于完全自定义错误消息的内容。

HTML 错误页面存储在站点根目录中的 /http-error 目录中。

我在 www.xmpl.link 创建了 NGINX PHP-FPM 快速设置指南您可以在其中学习如何启动服务器、下载准备使用的错误页面模板等等。

######    #####     #####      ####     #####        #####       ##       ####     ######     ####  
#         #    #    #    #    #    #    #    #       #    #     #  #     #    #    #         #      
#####     #    #    #    #    #    #    #    #       #    #    #    #    #         #####      ####  
#         #####     #####     #    #    #####        #####     ######    #  ###    #              # 
#         #   #     #   #     #    #    #   #        #         #    #    #    #    #         #    # 
######    #    #    #    #     ####     #    #       #         #    #     ####     ######     ####  

# ------------------------------------------------------------------------------
# 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;
}
于 2020-06-07T14:55:04.413 回答