Nginx 413 错误需同步调整 Nginx 的 client_max_body_size(推荐在 location 块设为200m)和 PHP 的 upload_max_filesize(200M)、post_max_size(220M)等参数,且 Nginx 值须 ≥ PHP 值;还需优化超时、缓冲及磁盘权限配置。

413 错误是 Nginx 在请求刚抵达时就拦截了过大的请求体,根本没转发给 PHP —— 所以改前端、调 PHP 代码或只调 php.ini 都无效。必须同步调整 Nginx 和 PHP 两层限制,且 Nginx 的值要 ≥ PHP 的值,否则仍会失败。
精准设置 Nginx 的 client_max_body_size
该指令生效位置优先级为:location > server > http。全局设在 http{} 容易误放开敏感接口,不推荐。
- 若仅 API 接口(如
/api/upload)需大上传,直接写在对应location块内:location /api/upload {<br> client_max_body_size 200m;<br> proxy_pass http://php_backend;<br>} - 若整站都需要(如 phpMyAdmin 或后台文件管理),设在
server{}块更安全 - 单位支持
m(兆)、g(吉),例如500m、2g;设为0表示不限制,但生产环境慎用
配套优化 Nginx 超时与缓冲参数
只调 client_max_body_size 不够,大文件上传耗时长、数据量大,还需协同调整:
-
client_body_timeout:读取客户端请求体超时,默认 60s → 建议设为300(5 分钟) -
proxy_read_timeout和proxy_send_timeout:Nginx 与 PHP-FPM 通信超时 → 建议统一设为600(10 分钟) -
client_body_buffer_size:内存缓存上限 → 推荐512k~1m;太小会频繁刷盘,太大挤占 worker 内存 - 确认
client_body_temp_path指向的磁盘有足够空间,且 Nginx 运行用户(如www-data)对该路径有读写权限
同步放宽 PHP8.1.27 的上传限制
Nginx 放行后,PHP 层仍有独立校验。需修改 php.ini(注意是 PHP-FPM 使用的那个配置文件,通常为 /etc/php/8.1/fpm/php.ini):
立即学习“PHP免费学习笔记(深入)”;
-
upload_max_filesize = 200M(单文件最大) -
post_max_size = 220M(整个 POST 请求体上限,必须 ≥upload_max_filesize) -
max_execution_time = 600、max_input_time = 600(避免超时中断) -
memory_limit = 512M(大文件处理需足够内存,尤其启用 GD 或 ZIP 处理时)
改完执行:sudo systemctl restart php8.1-fpm(或 php-fpm8.1,依系统命名而定)
验证与常见陷阱
配置 reload 后,可通过以下方式验证是否生效:
- 用
curl -X POST -F "file=@large.zip" http://yoursite.com/api/upload测试上传 - 检查响应头中是否有
Server: nginx/1.22.1(确认走的是 Nginx)而非直接暴露 PHP - 若仍报 413,查看 Nginx error log(如
/var/log/nginx/error.log),确认是否提示 “client intended to send too large body” - 注意:某些 CDN 或 WAF(如阿里云 DDoS 防护、腾讯云 Web 应用防火墙)也自带上传限制,需单独排查



















