NGINX“client_max_body_size”指令在“location”块内不起作用

Tem*_*vit 17 nginx

我的/admin网站上有一个目录,我想允许管理员通过 Web 表单上传大文件。这是我的 nginx.com 的外观:

http {
    # ...
    client_max_body_size 16M;
    # ...

    server {
        server_name example.com;
        root /var/www/example.com;
        index index.php;

        location /admin {
            client_max_body_size 256M;
        }

        # ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用。/admin/index.php脚本无法上传大于 16Mb 的文件:413 请求实体太大

但是,如果我移动client_max_body_sizeserver块一切工作正常。但我不想仅对admin目录进行此更改。

根据docsclient_max_body_size可以放置在location块内以仅覆盖所需路径的设置。

可能有什么问题?

Mar*_*ald 18

它工作得很好,问题是您误解了位置的工作方式。Nginx 只会应用一个位置块,绝不会超过一个。所以当你有两个位置时

location ~ \.php$并且location /adminURI 是/admin/index.php您的第一个位置,但第二个位置不适用。即使您要在某个位置使用重写,nginx 也会丢弃指令并为新位置重新解析它们。

这也是你总是发布完整配置的原因,这样你就不会隐藏真正的错误。