使用Dokku部署Laravel应用时上传大文件提示Payload too large的解决方法
解决Dokku部署Laravel大文件上传的"Payload too large"问题
1. 配置应用级Nginx参数(优先级高于全局)
Dokku每个应用有独立的Nginx配置,全局修改可能被应用配置覆盖。在本地项目根目录创建nginx.conf.sigil文件,添加以下内容:
server { listen [::]:{{ .NGINX_PORT }}; listen {{ .NGINX_PORT }}; server_name {{ .NGINX_HOST }}; client_max_body_size 300M; # 匹配你的最大上传文件大小 {{ include "nginx.conf.template" . }} }
然后将文件推送到Dokku服务器:
git add nginx.conf.sigil git commit -m "Increase upload max body size" git push dokku main
推送后Dokku会自动重建应用的Nginx配置。
2. 修改PHP-FPM配置
Laravel依赖PHP-FPM,需要调整PHP的上传相关参数:
- 通过Dokku环境变量设置(推荐):
dokku config:set your-app-name PHP_UPLOAD_MAX_FILESIZE=300M PHP_POST_MAX_SIZE=300M PHP_MAX_EXECUTION_TIME=300 PHP_MAX_INPUT_TIME=300
- 或者自定义php.ini文件:在项目根目录创建
.user.ini,添加:
upload_max_filesize = 300M post_max_size = 300M max_execution_time = 300 max_input_time = 300
同样提交并推送到Dokku。
3. 调整Laravel应用内部配置
- 检查表单验证规则:确保上传字段的验证规则没有限制过小的大小,比如:
// 在表单请求类中 public function rules() { return [ 'file' => 'required|file|max:307200', // 300MB = 300*1024 KB ]; }
- 确认文件系统配置:
config/filesystems.php中没有额外的上传限制,默认Laravel不限制,除非自定义了逻辑。
4. 重启相关服务(确保配置生效)
如果上述配置后仍有问题,手动重启Dokku的Nginx和应用的PHP-FPM服务:
# 重启Dokku Nginx服务 sudo service nginx restart # 重启你的应用 dokku ps:restart your-app-name
验证配置是否生效
可以通过以下方式确认参数是否正确加载:
- 查看Nginx配置:
dokku nginx:show-config your-app-name,检查是否包含client_max_body_size 300M; - 在Laravel中创建一个phpinfo路由,查看PHP的
upload_max_filesize、post_max_size等参数是否正确。
内容的提问来源于stack exchange,提问作者Kingsley Akindele
相关产品推荐
相关产品推荐

