NGINX 中HTTP请求大小相关配置及解决方案-1

NGINX中收到HTTP请求大小相关的错误,以下典型错误及相关解决方案。

nginx 配置文件 nginx.conf

user root;
worker_processes 1;

error_log logs/error.log debug;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}

http {
#large_client_header_buffers 4 16k;

server {
listen 80;
server_name localhost;

location / {
root /root/nginx-quic/html;
index index.html index.htm;
}
}
}


1. 请求头超长(HTTP 400/414)

  • HTTP 400 (Bad Request):请求头过大,导致无法解析。
  • HTTP 414 (URI Too Long):请求行(URI 部分)过长。

 模拟请求头超长

curl -v -H "$(head -c 8192 < /dev/zero | tr '\0' 'A'): value" http://localhost

此命令发送一个包含 8192 个字符的请求头字段, 返回结果

< HTTP/1.1 400 Bad Request
< Server: nginx/1.25.4
< Date: Sat, 23 Nov 2024 13:26:23 GMT
< Content-Type: text/html
< Content-Length: 233
< Connection: close

检查 error.log,通常会看到类似以下错误:

2024/11/23 21:26:23 [info] 1494546#0: *1 client sent too long header line: "AAAAAAAAAAAAAAAAAAAAA。。。

模拟 URI 超长

curl -v "http://localhost/$(head -c 10000 < /dev/zero | tr '\0' 'a')"

此命令发送一个包含 10000 个字符的uri, 返回结果

< HTTP/1.1 414 Request-URI Too Large
< Server: nginx/1.25.4
< Date: Sat, 23 Nov 2024 13:28:47 GMT
< Content-Type: text/html
< Content-Length: 177
< Connection: close

检查 error.log,通常会看到类似以下错误:

2024/11/23 21:30:40 [info] 1495051#0: *1 client sent too long URI while reading client request line, client...

修复方法

  • 调整 large_client_header_buffers
large_client_header_buffers 4 16k;

2. 请求体超大(HTTP 413)

  • HTTP 413 (Payload Too Large):请求体超过限制。

 发送一个大文件(超过限制):

nginx client_max_body_size 默认值 为 1M:

dd if=/dev/zero of=large_file bs=1M count=2
curl -v -X POST -F "file=@large_file" http://localhost
  • 客户端返回 413 Request Entity Too Large
< HTTP/1.1 413 Request Entity Too Large
< Server: nginx/1.25.4
< Date: Sat, 23 Nov 2024 14:33:04 GMT
< Content-Type: text/html
< Content-Length: 183
< Connection: close

检查 error.log,通常会看到类似以下错误:

2024/11/23 22:33:04 [error] 1495158#0: *7 client intended to send too large body: 2097366 bytes

  修复方法

  • 调整 client_max_body_size
client_max_body_size 50m;

总结

问题类型 错误代码 配置项 解决方法
请求头字段或 URI 太长 400/414 large_client_header_buffers 增加缓冲区大小或数量
请求体太大 413 client_max_body_size 增加请求体最大大小限制

 

图片from陳柏濡

Comments are closed.