为什么在使用nginx_http_mirror_module时,limit_except GET { deny all; }对PURGE请求无效?

sz81bmfz  于 7个月前  发布在  Nginx
关注(0)|答案(1)|浏览(63)

我试图镜像我的nginx服务器上的所有GET请求,到另一个web应用程序进行分割测试.这工作和过滤所有请求类型,但GET -但-不幸的是,它也发送PURGE请求向前到镜像.所以不知何故,limit_except似乎不过滤这些PURGE请求.
为什么会这样?

以下是我的部分配置:

从HTTP块:

split_clients "${remote_addr}AAA" $mirror_backend {
    30% web_mirror;
    *   "";
 }

字符串
从服务器块:

location / {
    
    gunzip on;
    include /etc/nginx/proxy_params;
    mirror /mirror;

    proxy_pass http://varnish;
  }

location = /mirror {
  internal;
    limit_except GET {
    deny  all;
  }
  if ($mirror_backend = "") {
    return 400;
  }
  
  include /etc/nginx/proxy_params;
  proxy_pass http://$mirror_backend$request_uri;
}


来自接收PURGE请求的镜像服务器的示例输出-它不应该:

10.0.0.10 mydomain.com 2023-10-25T14:51:52+02:00 "PURGE /path/here HTTP/1.1" 405 0 "-" "cache-warmer/android" - "-" - - - - 99cae641-0961-48b3-9965-bfd4a8ed3ff7 0.091 - - - - ruby

jv2fixgn

jv2fixgn1#

根据文件
方法参数可以是以下参数之一:GET、HEAD、POST、PUT、POST、MKCOL、COPY、MOVE、OPTIONS、PROPFIND、PROPPATCH、REPORT、UNREPORT或PATCH。
可以看到,limit_except无法识别PURGE

location = /mirror {

    internal;

    if ($request_method = PURGE) {
        return 444;
    }

    limit_except GET {
        deny all;
    }

    if ($mirror_backend = "") {
        return 400;
    }

    include /etc/nginx/proxy_params;
    proxy_pass http://$mirror_backend$request_uri;
}

字符串
我已经使用了444,但请随意使用其他你认为更合适的东西。

相关问题