![NGINX“client_max_body_size”指令在“location”块内不起作用](https://linux22.com/image/559366/NGINX%E2%80%9Cclient_max_body_size%E2%80%9D%E6%8C%87%E4%BB%A4%E5%9C%A8%E2%80%9Clocation%E2%80%9D%E5%9D%97%E5%86%85%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我的网站上有一个/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_size
到server
块,一切都会正常。但我不想只对admin
目录进行此更改。
根据文档,client_max_body_size
可以放置在location
块内以仅覆盖所需路径的设置。
可能出了什么问题?
答案1
它工作得很好,问题是你误解了位置的工作方式。Nginx 只会应用一个位置块,永远不会超过一个。所以当你有两个位置时
location ~ \.php$
并且location /admin
URI 是/admin/index.php
,则第一个位置适用,但第二个位置不适用。即使您在某个位置内使用重写,nginx 也会丢弃指令并针对新位置重新解析它们。
这也是您总是发布完整配置的原因,这样您就不会隐藏实际的错误。