redis bind 设置

在 Linux 中安装了redis 服务

在 Windows 中安装了xampp环境。以供PHP运行

PHP代码如下:

?
1
2
3
4
5
6
<code class= "language-php hljs " ><! --?php
     $redis = new Redis();
     $redis --->connect('192.168.1.4', 6379);
     $redis-> set ( 'tag' , 'hello' );
 
     echo 'name:' , $redis->get( 'tag' );</code>

执行以上代码时,报错如下:

Fatal error: Uncaught exception ‘RedisException’ with message ‘Redis server went away’ in xxxx

RedisException: Redis server went away in xxxxxx

解错误分析及解决办法


错误的原因很简单,就是没有连接上redis服务,由于redis采用的安全策略,默认会只准许本地访问。需要通过简单配置,完成允许外网访问。

修改redis的配置文件,将所有bind信息全部屏蔽。

# bind 192.168.1.100 10.0.0.1
# bind 192.168.1.8
# bind 127.0.0.1

修改完成后,需要重新启动redis服务。

修改 Linux 的防火墙(iptables),开启你的redis服务端口,默认是6379

-A INPUT -m state –state NEW -m tcp -p tcp –dport 6379 -j ACCEPT
……
-A INPUT -j REJECT –reject-with icmp-host-prohibited

请注意,一定要将redis的防火墙配置放在 REJECT 的前面。然后执行 service iptables restart

至此,访问刚刚上面的代码,就能够链接到redis服务,并且能够正确显示了。

关于bind


翻看网上的文章,此处多翻译为“指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求,在生产环境中最好设置该项”。这种解释会totally搞糊涂初学者,甚至是错误的。该处的英文原文为

# If you want you can bind a single interface, if the bind option is not
# specified all the interfaces will listen for incoming connections.
# bind 127.0.0.1

该处说明bind的是interface,也就是说是网络接口。服务器可以有一个网络接口(通俗的说网卡),或者多个。打个比方说机器上有两个网卡,分别为192.168.205.5 和192.168.205.6,如果bind 192.168.205.5,那么只有该网卡地址接受外部请求,如果不绑定,则两个网卡口都接受请求。

OK,不知道讲清楚没有,在举一个例子。在我上面的实验过程中,我是将bind项注释掉了,实际上我还有一种解决方案。由于我redis服务器的地址是 192.168.1.4 。如果我不注释bind项,还有什么办法呢?我可以做如下配置:

# bind 192.168.1.4

这里很多人会误以为绑定的ip应该是请求来源的ip。其实不然,这里应该绑定的是你redis服务器本身接受请求的ip。转自:https://www.2cto.com/database/201507/419799.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值