nginx 限流后 post 请求返回 405

2022-01-17 17:10:06 +08:00
 mahyclarv

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;
      }
      error_page 405 @405;
      location @405 {
         rewrite ^(.*)$ /503.html break;
      }
   }
}

问题一:为啥限流时 POST 请求不返回 503 而是返回 405 ?
问题二:为啥重写 405 不生效呢?

1820 次点击
所在节点    NGINX
3 条回复
lululau
2022-01-17 18:30:41 +08:00
curl -XPOST xxx/503.html
mahyclarv
2022-01-17 20:08:31 +08:00
已经解决了
```
location @503 {
if ( $request_method = POST ) {
return 503;
}
rewrite ^(.*)$ /503.html break;
}
```
猜想是 post 请求触发限流时,经过重写后请求内容已经变成了 503.html 静态文件,因此才触发的 405 规则,因此需要直接返回 503 状态码
mahyclarv
2022-01-17 20:08:50 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/828814

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX