配置redis外网可访问

环境描述


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
# 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。

发布了113 篇原创文章 · 获赞 154 · 访问量 62万+
展开阅读全文

救命……域名能ping通 ip 能访问 外网域名无法访问 服务器自己用域名可以访问 wamp环境

03-06

网络上各种答案各种配置都改烂了一点效果没有 不要怀疑我的毅力 一天了 具体情况是 ping域名能返回正确的服务器ip 浏览器用ip地址可以看到正确的内容 浏览器用域名只返回Bad Request 不是电脑问题 其他人访问也一样 服务器环境为wamp 改遍了所有apache绑定域名的方法没有一点效果 服务器自己访问域名可以看到正确的内容 没有在服务器上设置localhost文件 服务器系统为 2003 能提供的信息应该就这么多了大家觉得我还有什么地方没说到可以问我 域名访问总是返回: Bad Request Your browser sent a request that this server could not understand. Knstat/2.1.1 救命…… _补充说明服务器环境:_ 云服务器 固定ip 这服务器暂时作为客户端数据交换用的 主页就显示“123” 域名绑定写在pttpd.conf中 wamp确实是绿色 服务器也在线 日志文件也确实创建了的 而且有访问记录写入 但是用域名访问就是会出问题 用过apache虚拟主机配置 还是不行而且直接连ip也不能访问了所以没用虚拟主机配置 绑定方式:配置文件后面添加 ``` NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot "D:/www" ServerName www.xxx.com ErrorLog "logs/xxx.error.log" Customlog "logs/xxx.com12.log" common </VirtualHost> ``` 而且很明显访问没有进入错误记录 ![访问记录](https://img-ask.csdn.net/upload/201603/06/1457240978_844991.jpg) 改了一天配置文件 改到怀疑人生…… 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 猿与汪的秘密 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览