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

我在我的网站上有一个/admin目录,我希望允许pipe理员通过networking表单上传大文件。 以下是我的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块内,以仅覆盖所需path的设置。

什么可能是错的?

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

location ~ \.php$location /admin和URI是/admin/index.php那么你的第一个位置适用,但第二个不适用。 即使你要在一个位置上使用重写,那么nginx会放弃指令并重新parsing它们以获得新的位置。

这也是为什么你总是发布完整的configuration,所以你不要隐瞒真正的错误。