如何设置nginx请求的允许URL长度(错误代码:414,URI过长)

94

我正在使用Nginx在10个Mongrel服务器前端。

当我发送大小大于2900的请求时,我会得到以下错误:

错误代码414:uri过长

有谁知道nginx配置文件中确定允许uri长度的设置?

3个回答

137

来源:http://nginx.org/r/large_client_header_buffers

语法: large_client_header_buffers 数值 大小 ;
默认值: large_client_header_buffers 4 8k;
上下文: http,server

设置用于读取大型客户端请求头的缓冲区的最大数量和大小。一个请求行的大小不能超过一个缓冲区的大小,否则将向客户端返回 414(Request-URI Too Large)错误。一个请求头字段的大小也不能超过一个缓冲区的大小,否则将向客户端返回 400(Bad Request)错误。这些缓冲区仅在需要时分配。默认情况下,缓冲区大小为 8K 字节。如果连接在请求处理结束后转换为 keep-alive 状态,则会释放这些缓冲区。

因此,您需要根据自己的需求将该行末尾的大小参数更改为更大的值。


2
感谢@VBart - 当我回答这个问题时,维基百科是唯一的文档,所以我没有意识到他们已经添加了一个“官方”文档部分。 - Stobor
1
感谢@talsibony-那是7年前直接从文档中复制/粘贴的内容,看起来自那时以来已更新。我会在这里进行更新... - Stobor
4
它解决了 414 错误,但现在 nginx 给出 502 - 坏的网关错误。 - Sohel Pathan
1
我不确定哪个文件应该有那个配置,有人知道吗? - Guido
1
如果您正在使用uwsgi,还需要在uwsgi.ini中增加缓冲区大小。https://dev59.com/85zha4cB1Zd3GeqPBzgm - user2608613
显示剩余4条评论

17

如果在https://forge.laravel.com上遇到问题,我综合了一些 Stack Overflow 的答案并成功解决了这个问题。您需要sudo密码。

sudo nano /etc/nginx/conf.d/uploads.conf

使用以下内容替换原内容:

fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;

client_max_body_size 24M;
client_body_buffer_size 128k;

client_header_buffer_size 5120k;
large_client_header_buffers 16 5120k;

通过 Forge 创建新服务器时,似乎找不到此文件,这意味着您可以通过 Forge 管理面板直接将其添加到服务器块中。 - Luke Snowden

5

我曾经遇到类似的问题,但出现了不同的错误

读取上游响应头时,上游服务器发送的头部过大

为了解决这个问题,我已经做出了如下修改

server {
....
proxy_buffers   4 32k;
proxy_buffer_size   32k;
...
}

如需更多信息,请访问Nginx文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接