Laravel API部署在带SSL的Apache2后接收40MB以上POST请求出现500错误的解决方法
看起来你已经把各个PHP配置文件的upload_max_filesize、post_max_size都调到足够大了,但Apache环境下还是触发了8MB的限制,而php artisan serve正常——这大概率是Apache自身或者PHP配置加载的问题,我帮你一步步排查:
检查Apache的请求大小限制
Apache本身有个LimitRequestBody指令,部分系统可能会设置默认限制(或者之前的配置有设值)。你需要在Apache的主配置文件(比如/etc/apache2/apache2.conf)或者你的SSL虚拟主机配置块里添加/修改这个指令:# 在<VirtualHost *:443>块内或者全局配置中添加 LimitRequestBody 2147483648 # 对应2GB,可根据你的需求调整单位(字节)验证当前Apache环境生效的PHP配置
有时候你修改了/etc/php/8.3/apache2/php.ini,但Apache可能没加载这个文件,或者存在局部配置覆盖。可以在Laravel项目里加个临时路由来查看实际生效的配置:// routes/api.php Route::get('/phpinfo', function () { phpinfo(); });访问这个路由后,搜索
post_max_size、upload_max_filesize这两个参数,确认实际值是不是你设置的2048M。如果还是8M,说明:- 你可能修改了错误的PHP版本配置文件(比如Apache用的是PHP8.2而不是8.3)
- 项目的
.htaccess或者虚拟主机里有php_value指令覆盖了全局配置
务必重启相关服务
修改配置后一定要重启服务才能生效,别漏掉PHP-FPM(如果Apache用的是FPM模式):# 重启Apache服务 sudo systemctl restart apache2 # 若使用PHP-FPM,同步重启 sudo systemctl restart php8.3-fpm排查局部配置覆盖
检查Laravel项目根目录的.htaccess文件,或者Apache虚拟主机配置中,是否存在类似下面的指令:php_value post_max_size 8M php_value upload_max_filesize 8M如果有,把这些值改成你需要的大小(比如2048M),或者直接删除这些行,让全局的php.ini配置生效。
按照这些步骤排查后,应该就能解决POST请求大小限制导致的500错误了。
备注:内容来源于stack exchange,提问作者X3R0

