Laravel通过FTP连接Minio服务器失败,报错无法连接21端口
Laravel通过FTP连接Minio失败的解决方案
问题根源
Minio默认未启用FTP协议服务,仅原生支持S3兼容API,直接使用Laravel FTP驱动连接会因目标端口无服务监听而报错。
解决步骤
1. 启用Minio的FTP服务
Minio需要显式配置开启FTP功能,可通过两种方式实现:
- 命令行启动时指定参数:
其中minio server ./data --console-address ":9001" --ftp="address=:21" --ftp="passive-port-range=30000-30009"--ftp="address=:21"指定FTP监听端口为21,passive-port-range设置被动模式端口范围,确保FTP客户端能正常连接。 - 使用配置文件持久化设置:
创建Minio配置文件~/.minio/config.json,添加FTP配置段:
启动Minio时指定配置目录:{ "version": "1", "credential": { "accessKey": "username", "secretKey": "password" }, "ftp": { "address": ":21", "passivePortRange": "30000-30009", "root": "/", "secure": false } }minio server ./data --console-address ":9001" --config-dir ~/.minio
2. 验证FTP服务可用性
先用第三方FTP客户端(如FileZilla)测试连接:
- 主机:
127.0.0.1 - 端口:
21(或你配置的自定义端口) - 用户名/密码:Minio的访问密钥和秘密密钥
确认能正常连接后,再尝试Laravel的配置。
3. 调整Laravel FTP配置(可选)
如果Minio FTP使用了非默认端口,需在config/filesystems.php中补充端口配置:
'ftp' => [ 'driver' => 'ftp', 'host' => env('FTP_HOST'), 'username' => env('FTP_USERNAME'), 'password' => env('FTP_PASSWORD'), 'port' => env('FTP_PORT', 21), // 新增端口配置 'root' => 'your-bucket-name', // 建议指定具体存储桶作为根目录 ],
对应.env文件补充:
FTP_PORT=21
4. 更优方案:使用Laravel S3驱动连接Minio
由于Minio原生支持S3协议,使用Laravel的S3驱动比FTP更稳定高效,推荐优先采用:
- 在
config/filesystems.php中添加S3驱动配置:'s3' => [ 'driver' => 's3', 'key' => env('MINIO_ACCESS_KEY'), 'secret' => env('MINIO_SECRET_KEY'), 'region' => env('MINIO_REGION', 'us-east-1'), 'bucket' => env('MINIO_BUCKET'), 'endpoint' => env('MINIO_ENDPOINT', 'http://127.0.0.1:9000'), 'use_path_style_endpoint' => true, // 必须开启,适配Minio路径风格 ], - 在
.env中配置Minio参数:MINIO_ACCESS_KEY=username MINIO_SECRET_KEY=password MINIO_BUCKET=your-bucket-name MINIO_ENDPOINT=http://127.0.0.1:9000 - 使用示例:
// 上传文件 Storage::disk('s3')->put('test.txt', 'Hello Minio!'); // 获取文件内容 $content = Storage::disk('s3')->get('test.txt');
内容的提问来源于stack exchange,提问作者Arslan Kiyani
相关产品推荐
相关产品推荐

