phpEnv 下仅调大 Nginx 的 client_max_body_size 不够,因 PHP 层 upload_max_filesize 和 post_max_size 仍会拦截并返回 413;需同步修改 php.ini 及 php-fpm 配置,并重启 PHP-FPM。

phpEnv 环境下出现 413 错误,光改 Nginx 的 client_max_body_size 不够,必须同步调整 PHP 层限制,否则请求会在 PHP-FPM 或 php.ini 级别被截断。
为什么 phpEnv 下改了 Nginx 还报 413
phpEnv 是集成环境(类似 XAMPP、WAMP),默认 Nginx + PHP-FPM 架构。Nginx 接收请求后转发给 PHP-FPM,而 PHP-FPM 本身不校验大小,真正起作用的是 PHP 解析器对上传数据的硬性限制。即使 Nginx 放开了,PHP 仍会按 upload_max_filesize 和 post_max_size 拒绝请求,并静默返回 413 —— 此时 Nginx error.log 里可能只显示 “client intended to send too large body”,但实际拦截点在 PHP。
-
upload_max_filesize控制单个文件上限 -
post_max_size控制整个 POST 请求体(含多文件、表单字段)上限,必须 ≥upload_max_filesize - phpEnv 的 PHP 配置文件路径通常是
/phpenv/etc/php.ini或/phpenv/php74/etc/php.ini(版本号依实际而定)
修改 phpEnv 的 php.ini 上传限制
直接编辑对应 PHP 版本的 php.ini,找到并修改这两项(注意:不要只改一个):
upload_max_filesize = 100M post_max_size = 100M
- 值单位支持
M(兆字节)、G(GB),不支持MB或GB写法 - 若使用
0表示不限制(生产环境慎用) - 改完必须重启 PHP-FPM:执行
phpenv restart或手动 kill + reload(如sudo pkill php-fpm && phpenv start) - 验证是否生效:写个
phpinfo.php访问,搜索upload_max_filesize看值是否已更新
phpEnv 中 Nginx 配置位置与作用域选择
phpEnv 的 Nginx 配置通常位于 /phpenv/nginx/conf/nginx.conf 或 /phpenv/nginx/sites-enabled/default。关键不是“能不能加”,而是“加在哪”:
立即学习“PHP免费学习笔记(深入)”;
- 加在
http{}块:全局生效,影响所有虚拟主机 - 加在
server{}块:仅对该站点生效,适合多项目共存场景 - 加在
location ~ \.php$ {}块内无效 ——client_max_body_size不允许出现在该上下文,Nginx 启动会报错 - 推荐写法:
client_max_body_size 100M;放在server{}块顶部,紧贴listen和server_name后
容易忽略的第三个限制:php-fpm 的 request limits
phpEnv 底层用 PHP-FPM,它还有独立的请求体限制参数(尤其当使用 socket 方式通信时)。检查 /phpenv/php-fpm/etc/php-fpm.d/www.conf:
- 确认
php_admin_value[upload_max_filesize]和php_admin_value[post_max_size]没有被硬编码覆盖(如有,优先删掉或同步调大) - 检查
request_terminate_timeout和request_slowlog_timeout,大文件上传耗时久,超时会导致连接中断,看似 413 实为 504,需一并调高(如设为600s) - 修改后需重启
php-fpm,不是只 reload Nginx
真正卡住上传的,往往是这三层中最小的那个值。调大时建议统一设为相同数值(如都设 100M),避免隐性截断;生产环境务必测试边界值,比如传一个刚好 100MB 的文件,而不是只测 99MB。



















