标签 405 下的文章

nginx配置:

http {
    limit_req_zone $binary_remote_addr zone=limit:50m rate=10r/m;
    server {
          server_name xxx;
          error_page 503 @503;
          location @503 {
             rewrite ^(.*)$ /503.html break;
          }
    }
}

这种情况下,如果是GET请求触发限流,会返回自定义的503.html页面内容,但是如果是POST请求触发限流,则会返回405 Method Not Allowed。
查看一下405产生的原因:
http://nginx.org/en/CHANGES

Screen Shot 2022-01-17 at 8.36.31 PM.png

可以看到,自0.7.11版本开始,POST请求静态文件内容会返回405,但我们这请求的POST接口并不是静态文件内容,为何会触发呢?
猜想是因为我们写了rewrite ^(.*)$ /503.html break;这条规则,即POST请求的不再是之前的接口而是这个503.html静态页面,因此,需要针对这个503自定义内容做一下修改:

http {
    limit_req_zone $binary_remote_addr zone=limit:50m rate=10r/m;
    server {
          server_name xxx;
          error_page 503 @503;
          location @503 {
             if ( $request_method = POST ) {
                return 503 'json内容或者文字内容比如 {"code":503,"msg":"xxx"}';
             }
             rewrite ^(.*)$ /503.html break;
          }
    }
}

这样修改后POST请求触发限流后不会返回405了