本地尝试连接到在ec2实例上运行的redis,但是尽管有所有流量入站,但仍会收到错误

时间:2018-03-26 22:37:10

标签: python amazon-web-services amazon-ec2 redis

redis通过守护程序

在ec2实例中运行
ps aux | grep redis-server
redis     1182  0.0  0.8  38856  8740 ?        Ssl  21:40   0:00 /usr/bin/redis-server 127.0.0.1:6379

netstat -nlpt | grep 6379
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      -               
tcp6       0      0 :::6379                 :::*                    LISTEN      1388/redis-server *

暂时我已将网络入站设置为所有流量,因此可能不存在网络安全问题。

Type         Protocol Port Range   Source      Description
All traffic  All      All          0.0.0.0/0

但是当我尝试从python端访问时:

import redis
r = redis.StrictRedis(host='ec2-xx-xxx-xx-xx.compute-1.amazonaws.com', port=6379, db=0)
r.set('foo', 'bar')
r.get('foo')

我收到以下错误:

  

ConnectionError:错误111连接到   ec2-xx-xxx-xx-xx.compute-1.amazonaws.com:6379。连接被拒绝。

尽管网络入站可能会导致此类问题,但对于所有流量并且ec2实例中的redis运行正常?

1 个答案:

答案 0 :(得分:2)

您的redis没有侦听来自外部的连接,而是仅侦听本地连接。

tcp        0      0 127.0.0.1:6379 

以下作品适用于Ubuntu。将/etc/redis/redis.confbind修改为0.0.0.0

# bind 127.0.0.1
bind 0.0.0.0

然后重启服务:

sudo service redis-server restart

警告:请勿在您的安全组中使用0.0.0.0。任何人都被允许。而只允许特定的IP或CIDR。