error_log的warn级别日志是定位413错误根源的关键:出现“client intended to send too large body”需调client_max_body_size;“Permission denied”指向临时目录权限问题;“upstream timed out”则属超时配置不当。
看到日志里反复出现 client intended to send too large body,别急着调大 client_max_body_size。这个报错只是表象,背后可能是配置、权限或超时问题——关键得靠 error_log 里的线索来判断。
默认 error_log 级别常设为 error,但这条提示实际在 warn 级别才输出。不改级别,就看不到真正原因。
nginx.conf 的 http 或 server 块中明确设置:error_log /var/log/nginx/error.log warn;
nginx -t && nginx -s reload 生效同一句报错,不同上下文指向完全不同的问题:
client intended to send too large body: XXX bytes → 确实是大小超限,需调 client_max_body_size
open() "/var/lib/nginx/tmp/client_body/" failed (13: Permission denied) → client_body_temp_path 目录权限不对或磁盘满,和大小参数无关upstream timed out 或 read timeout → 是 proxy_read_timeout 或后端响应慢,Nginx 在读取请求体过程中卡住,不是拒绝上传这个指令可放在 http、server 或 location 块,优先级从低到高:
http{} 里,影响所有 serverserver{} 里,只对该站点有效location /upload { } 里,仅对上传接口生效即使 client_max_body_size 调得再大,临时目录不可写照样失败:
nginx -V 2>&1 | grep -o 'with-http' | head -1 不够用,直接看 conf 中是否有 client_body_temp_path;没配则默认是 prefix/client_body_temp
df -h 看对应磁盘剩余空间,尤其注意 tmpfs 类型挂载点是否已满