当前位置:   article > 正文

Redis:客户端连接远程服务器方法_error: protocol error, got "s" as reply type byte

error: protocol error, got "s" as reply type byte

问题描述

昨晚在公司,本想通过远程连接测试下redis的benchmark的性能,并且跟自己修改源码实现的部分功能做对比,结果死活连接不上远程redis服务器!

系统配置:客户端ubuntu16.04  /  服务器tlinux 2.2   Redis都是4.0稳定版本

另外需要注意的是:服务器是公司的远程服务器,我们只能通过跳板机通过ssh从端口 36000 远程登陆该服务器

连接方法

第一步:开启redis 允许外网IP 访问

在 Linux 中安装了redis 服务,当在客户端通过远程连接的方式连接时,报could not connect错误。

错误的原因很简单,就是没有连接上redis服务,由于redis采用的安全策略,默认会只准许本地访问。

修改redis的配置文件redis.conf, 将配置文件中的bind 127.0.0.1注释掉。

修改完后,服务器端需要使用配置文件重启

./redis-server ./redis.conf

第二步:修改配置文件中protected-mode配置项

配置文件中protected-mode配置项默认开启yes,redis处于保护模式状态,会拒绝来自其它主机的连接。

解决方式:将protected-mode配置项设为no。
 

第三步:修改 服务器Linux 的防火墙(iptables),开启redis服务端口,默认是6379

注:这一步可选的!如果你的服务器防火墙有开放6379,那么你做完前面两步大概率就可以连接服务器进行操作了。

但是我用的公司远程服务器,然后登陆端口是36000, redis默认的6379端口估计没开,做完前面两步出现的问题是这样的:

(1)使用6379:./redis-cli -h 服务器ip -p 6379   出现拒绝连接的情况

(2)改用36000:./redis-cli -h 服务器ip -p 36000 连接成功了,但是。。。

如上图所示,这样子连接虽然连接成功,但是操作的时候,就报这两种错误:

Error: Protocol error, got "S" as reply type byte  和  Error: Connection reset by peer

注意这个时候服务器的配置文件中port是默认的6379,然后我把它改为36000,重新试,没用,还是这个错误。

最后我感觉是服务器防火墙可能是没开6379的端口,所以不允许客户端用这个端口访问,所以出现拒绝连接的情况。于是做出如下修改:

1 编辑防火强配置文件 

vim /etc/sysconfig/iptables

2 添加一行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

3 重启服务:

service iptables restart

当然我把配置文件中的port也改回了默认的6379,重启之后就可以用6379连接啦!

----------

当然还有一个问题:我最后防火墙允许6379访问,然后就能用6379连接并操作了,但是我之前用36000连接成功,但是操作失败,这是为什么呢? 

既然能通过36000远程登陆该服务器,说明这个端口本来就是开着的,所以我能通过这个端口连接成功,但是操作的时候就失败咋回事还不清楚!
 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/508392
推荐阅读
相关标签
  

闽ICP备14008679号