为何client_max_body_size 0;未生效?上传50M文件报413错误
尝试上传50M文件时收到错误提示:413 Request Entity Too Large nginx/1.25.3。已在Nginx配置的所有区块中设置client_max_body_size 0;,应用已容器化且配置文件已映射到Docker,其他配置正常,但该参数未生效。当前Nginx配置代码如下:
client_max_body_size 0; upstream lito_upstream { # ip_hash; server viajah-api:8000; server front_viajah:3000; } server { client_max_body_size 0; location /static/ { client_max_body_size 0; autoindex on; alias /src/static/; } location /media/ { client_max_body_size 0; autoindex on; alias /src/media/; } location / { client_max_body_size 0; proxy_pass http://viajah-api:8000/; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递Cookie头 proxy_set_header Cookie $http_cookie; } listen 8000; server_name api.viajahturismo.com.br; } server { client_max_body_size 0; # 定义服务器监听请求的端口 include /etc/nginx/mime.types; location /media/ { client_max_body_size 0; autoindex on; alias /app/media/; } location / { client_max_body_size 0; proxy_set_header Host $host; proxy_pass http://front_viajah:3000; } listen 3000; server_name viajahturismo.com.br; }
排查步骤
确认Nginx加载的配置文件是否正确
进入Nginx容器执行nginx -t,查看输出中显示的配置文件路径是否与你挂载的配置文件一致。若路径不符,说明配置未被加载,需调整Docker挂载路径。检查是否存在配置覆盖
执行nginx -T(大写T)查看完整生效配置,搜索client_max_body_size,确认是否有其他配置文件或区块设置了更小的值,覆盖了你当前的配置。验证容器内配置文件的正确性
进入容器查看配置文件内容,例如执行cat /etc/nginx/your-config-file.conf(替换为实际路径),确认client_max_body_size 0;已正确写入,排除挂载时的权限或同步问题。确保Nginx重载了配置
不要仅重启容器,进入容器执行nginx -s reload手动重载配置;若重启容器,需确认Nginx进程在启动时重新加载了配置。检查后端应用的上传限制
即使Nginx允许大文件上传,后端服务(如viajah-api:8000)可能自身存在文件大小限制,比如Django的FILE_UPLOAD_MAX_MEMORY_SIZE、Flask的MAX_CONTENT_LENGTH等,需同步调整后端配置。
内容的提问来源于stack exchange,提问作者Carlos Curcino

