V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
mahyclarv
V2EX  ›  NGINX

nginx 限流后 post 请求返回 405

  •  
  •   mahyclarv · 2022-01-17 17:10:06 +08:00 · 1827 次点击
    这是一个创建于 1039 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 不生效呢?

    lululau
        1
    lululau  
       2022-01-17 18:30:41 +08:00   ❤️ 1
    curl -XPOST xxx/503.html
    mahyclarv
        2
    mahyclarv  
    OP
       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
        3
    mahyclarv  
    OP
       2022-01-17 20:08:50 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2655 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:32 · PVG 23:32 · LAX 07:32 · JFK 10:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.