我希望允许客户端在我们的系统上上传文件,并且我希望他们能够上传大于 nginx 中设置的默认正文的文件。
所以我在我们的站点配置中设置了以下内容:
client_max_body_size 10m;
到目前为止,一切都很好,但我真的只需要一个 URL 上的这个更大的正文;一个用户POST
。
所以我尝试了以下配置:
location /api/files/ {
client_max_body_size 10m;
}
但这根本不起作用,我在日志中收到以下错误:
2016/04/24 13:52:51 [错误] 17853#0: *1569513 客户端打算发送太大的正文:1083334 字节,客户端:203.0.113.7,服务器:example.com,请求:“POST /api/files HTTP/1.1”,主机:“example.com”
所以我尝试了以下更改:
location = /api/files {
client_max_body_size 10m;
}
但这只会导致不同的错误:
2016/04/24 14:25:50 [错误] 19500#0: *171 open() "/usr/share/nginx/html/api/files" 失败(2:没有这样的文件或目录),客户端:203.0 .113.7,服务器:example.com,请求:“POST /api/files HTTP/1.1”,主机:“example.com”
这让我假设它location
实际上是指本地文件系统上的位置,即使文档说:
根据请求 URI 设置配置。
那么,如何仅将此配置更改应用于此单个请求位置?
我认为解决方案在于嵌套位置。所以“location /api/files”应该在你的 php 位置块内。您的 fastcgi 配置应该被继承到“文件”位置。
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
如果您在 php 位置之外有位置 /api/files,则 nginx 会找到“api/files”并记住它。但在使用它之前,它会检查是否有一个匹配正则表达式的位置,这将是 php 文件请求的 php 位置。然后它将使用 php 位置并丢弃“位置 api/文件”。