You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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配置段:
    {
      "version": "1",
      "credential": {
        "accessKey": "username",
        "secretKey": "password"
      },
      "ftp": {
        "address": ":21",
        "passivePortRange": "30000-30009",
        "root": "/",
        "secure": false
      }
    }
    
    启动Minio时指定配置目录:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:07:30