Redis配置外网可访问(redis远程连接不上)的方法
人气:0默认情况下,当我们在部署了redis服务之后,redis本身默认只允许本地访问。Redis服务端只允许它所在服务器上的客户端访问,如果Redis服务端和Redis客户端不在同一个机器上,就要进行配置。
使用redis报错
例如使用redis的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
错误分析
默认情况下,如果没有指定bind配置指令,则 Redis 监听来自服务器上所有可用网络接口的连接。可以使用bind配置指令来监听一个或多个选定的接口,在bind后拼接一个或多个 IP 地址即可。
服务器可以有一个网络接口(通俗的说网卡),或者多个。打个比方说机器上有两个网卡,分别为 192.168.205.5 和 192.168.205.6,如果 bind 192.168.205.5,那么只有该网卡地址接受外部请求,如果不绑定,则两个网卡口都接受请求。所以,如果要让公网可以连接该服务器上的 Redis 服务,除了直接注释掉 bind 这一行来绑定到所有的网络接口之外,更正确的做法应该是不注释
警告:如果运行 Redis 的计算机直接暴露在互联网上,绑定到所有的接口是很危险的,并会将实例暴露给互联网上的每个人。因此,默认情况下,我们取消注释以下绑定指令,这将强制 Redis 只监听 IPv4 回环接口地址(这意味着 Redis 只接受来自运行它的计算机上的客户端的连接)。
解决办法
1、找到自己服务器中redis的配置文件redis.conf 文件
如果不清楚,可执行 find / -name redis.conf
如果是你通过yum安装的redis,则redis的默认配置文件为:/etc/redis/redis.conf
修改 redis 的配置文件,将所有 bind 信息全部屏蔽。
# bind 192.168.1.100 10.0.0.1 # bind 192.168.1.8 # bind 127.0.0.1
2、如果你的服务器开启了防火墙策略,此时需要配置修改 Linux 的防火墙(iptables),开放对应的redis端口,该端口为你启动的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。
3、重启redis服务
加载全部内容