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


14

我的/admin网站上有一个目录,我希望允许管理员通过网络表单上传大文件。这是我的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目录进行此更改。

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

有什么事吗

Answers:


14

一切正常,问题在于您误解了位置的工作方式。Nginx只会应用一个位置块,永远不会超过一个。所以当你有两个位置

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

这也是为什么您总是发布完整的配置以便不隐藏实际错误的原因。


抱歉,由于没有发布完整的配置,您是对的。至于答案,那不是真的。这是来自docs的示例:wiki.nginx.org/HttpCoreModule#location在其他地方,多个位置块对我来说也很好。
Temnovit

1
对不起,但这是100%正确的。Nginx可以搜索多个位置块,但是只会应用其中之一的指令。选择哪个选项取决于链接页面上记录的规则。
马丁·峡湾

@MartinFjordvald对此有什么解决方案?
chaosguru

configuration E在以下链接中查看:nginx.org/en/docs/http/ngx_http_core_module.html#location
holmberd

1
@Juanitocalero不是真的,官方文档不是很好的入门指南,更多是关于语法和基本信息的参考文档。
Martin Fjordvald
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.