2017-01-20 98 views
2

我试图连接与predis 1.1和SSL到Redis的,以信息https://github.com/nrk/predis,在本例中的配置用来:Laravel + Redis通过SSL缓存?

// Named array of connection parameters: 
$client = new Predis\Client([ 
    'scheme' => 'tls', 
    'ssl' => ['cafile' => 'private.pem', 'verify_peer' => true], 
]); 

我Laravel配置看起来像如下:

'redis' => [ 
     'client' => 'predis', 
     'cluster' => env('REDIS_CLUSTER', false), 

     'default' => [ 
      'host' => env('REDIS_HOST', 'localhost'), 
      'password' => env('REDIS_PASSWORD', null), 
      'port' => env('REDIS_PORT', 6379), 
      'database' => 0, 
     ], 

     'options' => [ 
      'cluster' => 'redis', 
      'parameters' => ['password' => env('REDIS_PASSWORD', null)], 
      'scheme' => 'tls', 
      'ssl' => ['verify_peer' => false], 
     ], 
    ], 

由于我没有用于SSL的密钥,因此我禁用了对等验证(按照http://php.net/manual/en/context.ssl.php)。

不幸的是我收到以下错误:

ConnectionException in AbstractConnection.php line 155: 
Error while reading line from the server. [tcp://MY_REDIS_SERVER_URL:6380] 

建议是赞赏:)

+0

请发布您的.env文件。该错误是它在.env – Paras

+0

中表示MY_REDIS_SERVER_URL的地方,MY_REDIS_SERVER_URL只是Redis服务器的URL。我可以通过端口6379访问它,但不能通过6380访问它们。两者都应该可以访问(这是Azure Redis缓存,默认情况下打开6380)。 –

+0

您是否找到了解决方案? – codiaf

回答

0

我能得到它的工作!

您需要将“方案”从'options''default'

我的工作配置:

'redis' => [ 
    'client' => 'predis', 
    'cluster' => env('REDIS_CLUSTER', false), 

    'default' => [ 
     'scheme' => 'tls', 
     'host' => env('REDIS_HOST', 'localhost'), 
     'password' => env('REDIS_PASSWORD', null), 
     'port' => env('REDIS_PORT', 6379), 
     'database' => 0, 
    ], 

    'options' => [ 
     'parameters' => ['password' => env('REDIS_PASSWORD', null)], 
     'ssl' => ['verify_peer' => false], 
    ], 
], 

注:我也从'options'删除'cluster'的选择,但我不怀疑这成为这个问题的决定性因素。

在我的final-final配置中,我将其更改为:'scheme' => env('REDIS_SCHEME', 'tcp'),,然后在我的env文件中定义了REDIS_SCHEME=tls

使用启用了TLS的AWS ElastiCache进行了测试。