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

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

我的网站上有一个/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;
        }

        # ...
    }
}

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

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

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

可能出了什么问题?

答案1

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

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

这也是您总是发布完整配置的原因,这样您就不会隐藏实际的错误。

相关内容