nginx - 根据 content_type 限制 client_max_body_size

nginx - 根据 content_type 限制 client_max_body_size

我正在寻找client body基于 nginx 中的内容类型来限制大小的方法。

location / {
    if ($content_type = "application/json") {
            client_max_body_size 1M;
            client_body_buffer_size 512K;
    }
    ...
    ...
}

我尝试了上述if条件,但失败并出现以下错误。

nginx: [emerg] "client_max_body_size" directive is not allowed here

我也尝试过使用这个,没有任何效果

location ~* ^.+\.json {
   client_max_body_size 1M;
   client_body_buffer_size 512K;
}

答案1

map您在 http 块中使用指令,但在任何服务器块之外。

map $http_content_type $upload_limit {
    default 0;
    application/json 1M;
}

这将根据第一个变量的值设置第二个变量,因此默认情况下它将为 0,但如果内容类型标头是 application/json,它将为 1M。

现在您可以像这样使用自定义变量client_max_body_size $upload_limit;

相关内容