nginx:创建HTTP 503维护自定义页面

时间:2020-01-09 14:16:12  来源:igfitidea点击:

我知道如何在Lighttpd或Apache Web服务器下创建自定义的http 503维护页面。
如何创建自定义的Nginx Web服务器维护页面?

HTTP错误代码503通知客户端和搜索引擎该网站因服务过载或关闭而暂时停止服务。
通常,这是一个临时状态。

步骤1:创建自定义503服务不可用的HTML页面

首先,您需要在/usr/local/nginx/html/error503.html上创建一个自定义的http 503页面:

<html>
<head>
<title>Error 503 Service Unavailable</title>
</head>
<body>
服务暂时不可使用,503
</body>
</html>

步骤2:更新Nginx配置

编辑/usr/local/nginx/config/nginx.conf,输入:

# vi /usr/local/nginx/config/nginx.conf

更新配置如下:

if (-f $document_root/error503.html) {
                return 503;
           }
           error_page 503 @maintenance;
           location @maintenance {
                rewrite ^(.*)$ /error503.html break;
           }

完整的配置如下:

server {
      access_log  logs/example.com_access.log main;
      error_log   logs/example.com_error.log info;
      index       index.html;
      limit_conn  gulag 50;
      listen      xxx.yyy.zzz.www:80 default;
      root        /usr/local/nginx/html;
      server_name example.com www.example.com;
 
     ## Only requests to our Host are allowed
      if ($host !~ ^(example.com|www.example.com)$ ) {
         return 444;
      }
 
     ## redirect www to nowww
     if ($host = 'www.example.com' ) {
         rewrite  ^/(.*)$  http://example.com/  permanent;
     }
 
     # Only allow these request methods
      if ($request_method !~ ^(GET|HEAD|POST)$ ) {
         return 444;
      }
 
      location / {
           if (-f $document_root/error503.html) {
                return 503;
           }
      }
 
     # redirect server error pages to the static page /50x.html
        error_page   500 502 504 /50x.html;
        location = /50x.html {
            root   html;
        }
     # error 403 
        error_page 403 /error403.html;
        location = /error403.html {
           root   html;
           allow all;
        }
     # error 503 redirect to errror503.html  
        error_page 503 @maintenance;
        location @maintenance {
              rewrite ^(.*)$ /error503.html break;
        }
}

保存并关闭文件。
重新加载nginx服务器,输入:

# /usr/local/nginx/sbin/nginx -s reload

为所有访问者提供维护页面,但允许完全访问某些IP

您可以使用$remote_addr变量检查远程或本地IP地址,如果访问者不是本地或远程,则发送503维护页面。
更新配置如下:

# skip our office router ip or webmaster ip 1.2.3.4
	  if ($remote_addr != "1.2.3.4") {
                return 503;
           }
           error_page 503 @maintenance;
           location @maintenance {
                rewrite ^(.*)$ /error503.html break;
           }

保存并关闭文件。
最后,重新启动或重新加载Nginx Web服务器:

# /usr/local/nginx/sbin/nginx -s reload

使用Geo IP模块跳过某些IP或子网

如果您在nginx下安装了Geo IP模块,则可以在全局部分中添加以下内容:

## add in global  section ###
	geo $maintenance {
		default 0;
		123.1.2.0/28 0;    # allow our office subnet to skip http 503 mode
		192.54.1.5 0;      # allow webmaster remote ip to skip http 503 mode
	}
 
## add in server section ###
      location / {
           if ($maintenance) {
                return 503;
           }
      }
      error_page 503 @maintenance;
      location @maintenance {
             rewrite ^(.*)$ /error503.html break;
      }

要从以下选项打开维护设置默认值:

default 0;

改成:

default 1;

最后,重新加载Nginx Web服务器:

# nginx -s reload

如何删除维护模式?

编辑nginx.conf并注释掉与维护相关的指令:

# skip our office router ip or webmaster ip
	  ###if ($remote_addr != "1.2.3.4") {
          ###      return 503;
          ### }

或者,如果您使用的是Geo IP模块,则默认设置为1到0:

default 0;

最后,重新加载Nginx Web服务器:

# service nginx reload