【问题标题】:How to configure Laravel 5.7 with Redis TLS (Using phpredis)如何使用 Redis TLS 配置 Laravel 5.7(使用 phpredis)
【发布时间】:2019-08-30 21:13:00
【问题描述】:

我将 laravel 5.7 与 phpredis (PHP 7.2) 一起使用,但我无法让它与 tls 一起使用,我正在尝试将它与仅支持 tls 连接的 digitalocean Redis 托管数据库一起使用

知道 laravel/phpredis 是否支持 tls?

【问题讨论】:

    标签: laravel redis phpredis


    【解决方案1】:

    来自phpredisGithub 回购README

    $redis->connect('tls://127.0.0.1', 6379); // enable transport level security.
    

    从 Laravel 的 illuminate\redis 来源,检查 PhpRedisConnector.php 第 99 行

    protected function establishConnection($client, array $config)
    {
            $persistent = $config['persistent'] ?? false;
    
            $parameters = [
                    $config['host'], // <---- Prepend the tls:// scheme here
                    $config['port'],
                    Arr::get($config, 'timeout', 0.0),
                    $persistent ? Arr::get($config, 'persistent_id', null) : null,
                    Arr::get($config, 'retry_interval', 0),
            ];
    
            if (version_compare(phpversion('redis'), '3.1.3', '>=')) {
                    $parameters[] = Arr::get($config, 'read_timeout', 0.0);
            }
    
            $client->{($persistent ? 'pconnect' : 'connect')}(...$parameters);
    }
    

    所以在你的 config\database.php 前面加上 tls:// 模式

    'redis' => [
    
        'client' => env('REDIS_CLIENT', 'phpredis'),
    
        'default' => [
                'url' => env('REDIS_URL'),
                'host' => 'tcp://' . env('REDIS_HOST', '127.0.0.1'),
                'password' => env('REDIS_PASSWORD', null),
                'port' => env('REDIS_PORT', 6379),
                'database' => env('REDIS_DB', 0),
        ],
    ]
    

    【讨论】:

    • 感谢您的支持,我之前确实尝试过,它给了我“php_network_getaddresses: getaddrinfo failed: Name or service not known” - (1/1) ErrorException Redis::connect(): php_network_getaddresses : getaddrinfo failed: Name or service not known in PhpRedisConnector.php line 109 at Application->Laravel\Lumen\Concerns\{closure}(2, 'Redis::connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known' , '/var/www/test/thebrain/current/vendor/illuminate/redis/Connectors/PhpRedisConnector.php', 109) 在 ErrorHandler.php 第 361 行
    • urlhost 有什么区别?如果它与客户或什么有关,我找不到任何文档。
    【解决方案2】:

    所以我设法让它工作,基本上,php 7.2 (Ubuntu 18) 附带的当前 phpredis 版本很旧并且不支持 tls,为了解决这个问题,我必须从 pecl (https://pecl.php.net/package/redis) 更新 phpredis

    【讨论】:

      猜你喜欢
      • 2019-04-03
      • 2021-03-13
      • 2020-06-24
      • 2022-01-01
      • 2013-07-28
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      相关资源
      最近更新 更多