python|redis 绑定ip不生效,redis外网无法访问的解决方案

因为在 redis 中bind 指定的ip 其实为同一网段或localhost 监听ip,在这里配置 内网其他网段或者外网多个ip 后重启 redis 是不会成功的,
这边建议使用 折中方案,开通防火墙 iptables 来做处理,例如: 我的是172.0.0.1 ,我想让172.1.10.5 和外网220.10.3.243 访问我服务器的redis ,
1.首先将redis.config 中的bind 全都#屏蔽
#bind 127.0.0.1
线上环境的话建议redis 配置密码
2. 在配置文件中找到requirepass password
password 为你设置的密码(开通外网访问)
3.配置iptables规则
通过iptables 允许指定的外网ip访问
iptables -A INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT
iptables -A INPUT -s 172.1.10.5-p tcp --dport 6379 -j ACCEPT
iptables -A INPUT -s220.10.3.243 -p tcp --dport 6379 -j ACCEPT
//其他ip访问全部拒绝
iptables -A INPUT -p TCP --dport 6379 -j REJECT

我遇到过一种情况,刚开始使用上面方法是行得通的,本地widows上redis desktop manager可以连上服务器redis,但是后来本地ip变了,执行上述命令却再也连不上了,后面试了下面方法才成功的。
???????
redis是一个key-value形式的缓存服务器,在实际测试redis连接时,一直显示图片中的问题,在遇到这样的问题时可以从以下几方面来排除问题

1. bind 127.0.0.1要注释掉
通过/bind 127.0.0.1搜索到后将其注释掉

2. 要为redis配置密码
通过/requirepass foobared搜索到后将其注释打开,同时将foobared修改为你要给redis设置的密码

3. 确保6379端口开放
6379是redis的默认端口,不打开端口,其他计算机将无法访问redis,使用以下命令来尝试查看6379端口是否打开
telnet 192.168.1.17 6379
结果,显示端口连接失败。

如果提示“telnet不是内部或外部命令”,可以在控制面板“打开或关闭Windows功能”中添加“telnet客户端”就可以使用telnet命令
尝试使用 vim /etc/sysconfig/iptables打算去打开6379,因为默认该端口是不对外开放的,但是到了centos7该文件是默认不存在的,使用iptables -P OUTPUT ACCEPT随便写一条规则,使用service iptables save来保存,这样在/etc/sysconfig下就生成了这个文件,
使用vim /etc/sysconfig/iptables来编辑这个文件,添加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
结果还是连不上,端口依旧没打开,查询网络发现centos7将firewall作为默认防火墙,所以使用
firewall-cmd --query-port=6379/tcp
去查看下linux里面是有没有开放这个端口,如果按照正常情况,应该提示我yes或者no,但是它提示了我firewall is not running
这才记起,原来使用centos7之前版本的端口配置方式时,将firewall防火墙给关了,使用
systemctl start firewalld.service
来将防火墙打开,将6379端口打开
firewall-cmd --add-port=6379/tcp
再测试
firewall-cmd --query-port=6379/tcp
就显示yes了
【python|redis 绑定ip不生效,redis外网无法访问的解决方案】



    推荐阅读