配置 redis 外网可拜候

发布日期:2019-07-23 19:55:57 阅读数: 175次 来源: 作者:

在 Linux 中安装了redis 办事。

在 Windows 中安装了 xampp 情况,以供 PHP 运转。

PHP 代码如下:

<?php
$redis = new Redis();
$redis->connect('192.168.1.4', 6379);
$redis->set('tag', 'hello');

echo 'name:', $redis->get('tag');
?>

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

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 
亚博手机app# 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。

本文由亚博手机app编辑整理亚博手机app