关于 Nginx 处理请求方法的猜想 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coolxiaobai
V2EX    NGINX

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

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

    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     Solana     5257 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude div class="sep20">
    VERSION: 3.9.8.5 26ms UTC 08:42 PVG 16:42 LAX 00:42 JFK 03:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86