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

关于 Nginx 处理请求方法的猜想

  •  
  •   Coolxiaobai · 2022-02-16 17:37:39 +08:00 · 2140 次点击
    这是一个创建于 995 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Nginx 处理 http 请求时,rewrite 模块可以获取到客户端请求方法,照官方文档,if 模块可以在 server 指令块或者 location 指令块中。

    猜想:比如为某个只有 GET 方法的后端接口配置一个 if 模块过滤时,非 GET 方法,直接 return 状态码加报错信息,和不过滤,直接放这个请求到具体的 location 块,让后端去处理。前面这个会不会性能更好点,请大佬不吝赐教。。。

      if ($request_method = GET){
        return 203 "method:$request_method 方法不合规\n";
        break;
      }
    
    
    9 条回复    2022-02-16 20:30:00 +08:00
    nl101531
        1
    nl101531  
       2022-02-16 17:46:30 +08:00
    1. nginx 一般会把特定域名下的全部请求按照比较通用的规则转发到指定后端服务器,比如 xxx.com/api 都转发到后端,没怎么见过一个方法配置一个 location 的,所以在这里做判断就不合适了。
    2. 这种方式两者有耦合,你后端加个方法,这里还要更新
    3. 这种算是异常场景,异常本身就是少数,没必要考虑性能损耗
    0ZXYDDu796nVCFxq
        2
    0ZXYDDu796nVCFxq  
       2022-02-16 17:57:36 +08:00 via Android
    性能没啥关系
    总不能报异常了还大量请求吧

    这种业务逻辑应该放后端
    Coolxiaobai
        3
    Coolxiaobai  
    OP
       2022-02-16 18:00:35 +08:00
    @nl101531 #1 确实是个奇葩场景,平常基本不会遇见。哈哈。不管它了
    ch2
        4
    ch2  
       2022-02-16 18:00:54 +08:00
    对于你要处理的这种异常,无论是 nginx 还是哪一个后端服务,都是 hello world 级别的小儿科
    nginx 单核能一秒拒绝好几 W 个这种 GET ,除非你的后端服务是老古董级别的 ASP.NET ,否则都是轻轻松松
    当且仅当系统要处理的异常请求占比非常高的时候,这两种才有区别,否则你没必要考虑什么性能问题,不必过早上各种乱七八糟的优化
    Coolxiaobai
        5
    Coolxiaobai  
    OP
       2022-02-16 18:02:31 +08:00
    @gstqc #2 安全方面考虑的话,攻击者应该也不会拿一个无效的请求方法大量请求。。。确实没必要了😂
    Coolxiaobai
        6
    Coolxiaobai  
    OP
       2022-02-16 18:04:12 +08:00
    @ch2 #4 嗯嗯,没想着优化,也没遇到这个场景,只是在翻译文档时有感而已。。。
    Kasumi20
        7
    Kasumi20  
       2022-02-16 18:07:06 +08:00
    性能肯定更好啊,都少了一步流程了,减少了一次 TCP 传输
    Dreax
        8
    Dreax  
       2022-02-16 18:38:49 +08:00
    eason1874
        9
    eason1874  
       2022-02-16 20:30:00 +08:00
    limit_except +1

    毫无疑问,在前端 Nginx 拒绝,性能更好。算是一个优化点,不过也不是多关键的优化,机器够用的时候,可有可无
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2570 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 15:36 · PVG 23:36 · LAX 07:36 · JFK 10:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.