首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Redis -连接到远程服务器

Redis -连接到远程服务器
EN

Stack Overflow用户
提问于 2011-12-17 00:39:54
回答 3查看 169.2K关注 0票数 123

我已经按照Ubuntu10.10服务器上的http://redis.io/topics/quickstart快速入门指南中的说明成功地安装了Redis。我以守护进程的身份运行服务(因此它可以由init.d运行)

服务器是具有内部和外部IP的Rackspace集群的一部分。主机运行在端口6379 (Redis的标准端口)上

我在iptables中添加了一行,以允许来自端口6379的传入连接,如下所示:

代码语言:javascript
复制
 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:6379 

在另一台服务器上的PHP代码中,我尝试在这里连接到新的Redis服务器:

代码语言:javascript
复制
$this->load->helper("iredis");

$hostname = "IP ADDRESS HERE";

$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));

一旦我这样做了-我总是得到一个连接被拒绝。在我的redis.conf文件中,我注释掉了本地绑定命令,因此它应该监听的不只是本地主机IP。我可以连接到本地机器上的数据库,而不是另一台服务器上的数据库。我已经尝试了外部和内部的IP,但没有成功。

有什么建议可以让它工作吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-10 06:17:40

首先,我会检查它是否在监听您期望的is:

代码语言:javascript
复制
netstat -nlpt | grep 6379

根据启动/停止方式的不同,您可能并没有在您认为已经重启的时候重新启动实例。netstat将告诉您它是否正在监听您认为它所在的位置。如果没有,请重新启动它,并确保它重新启动。如果它重新启动,但仍然没有在您期望的位置侦听,请检查您的配置文件,以确保无误。

在建立它之后,从应该有访问权限的远程节点尝试在您期望的位置进行侦听:

代码语言:javascript
复制
redis-cli -h REMOTE.HOST ping

您也可以尝试从本地主机执行此操作,但使用您希望它监听的IP,而不是主机名或本地主机。在这两种情况下,您都应该看到响应中的PONG。

如果没有,则说明您的防火墙正在阻止您。这可以是本地IPTables,也可以是节点之间的防火墙。您可以将日志记录语句添加到IPtables配置中,以记录6379上的连接,以查看发生了什么情况。此外,尝试从本地和非本地ping相同的IP应该是说明性的。如果它在本地响应,而不是远程响应,我会倾向于使用中间防火墙,这取决于节点上IP表规则的复杂性。

票数 130
EN

Stack Overflow用户

发布于 2020-01-22 16:10:39

有几天我一直在为远程连接Redis而苦苦挣扎。我终于成功了。这是我整理的完整的清单,用来建立联系。上面的答案中给出了一些解决方案。然而,我希望我的答案是一个关于这个主题的纳米维基:)我还添加了一些有用的链接。

如果redis在本地工作:

代码语言:javascript
复制
$ redis-cli
127.0.0.1:6379>ping
PONG
127.0.0.1:6379>

如果未设置密码

参见/etc/redis/redis.conf配置(这是Ubuntu18.04的默认位置,您可以将其放在不同的位置):

代码语言:javascript
复制
# The following line should be commented
# requirepass <some pass if any>

如果在配置中将保护模式设置为'no‘:

代码语言:javascript
复制
# The following line should be uncommented
protected-mode no

如果在配置中打开了IP绑定以允许从internet访问:

代码语言:javascript
复制
# The following line should be commented
# bind 127.0.0.1 ::1

如果Linux防火墙允许连接

(这里是Ubuntu18.04)检查它允许进入的互联网流量去端口6379 ( Redis的默认端口)

代码语言:javascript
复制
# To check if it the port is open
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
...
6379/tcp                   ALLOW       Anywhere
6379/tcp (v6)              ALLOW       Anywhere (v6)
...

# To open the port
$ sudo ufw allow 6379/tcp

重启Redis服务

请不要忘记重启Redis服务以使更改生效,并查看它是否正在运行:

代码语言:javascript
复制
$ sudo systemctl restart redis.service
$ sudo systemctl status redis

检查它是否作为远程服务器工作

在命令行中使用redis-cli,就好像Redis服务器在远程服务器上一样:

代码语言:javascript
复制
$ redis-cli -h <your-server-ip>
<your-server-ip>:6379> ping
PONG
<your-server-ip>:6379> exit
$

如果你可以乒乓你的Redis服务器,通过你的互联网服务器作为远程服务器连接,那么远程Redis连接就可以工作。

安全警告

所有这些使得你的Redis数据对互联网上的任何人都是完全开放的。

要从根本上保护Redis的安全,请使用Redis配置中的requirepassprotected-mode yes设置(参见上文),并阻止危险的Redis命令(参见上面的链接),有关更深入的理解,请参阅this articleRedis site security section )。

有用的链接

一些帮助How to install and secure Redis on Ubuntu 18.04how to setup Ubuntu 18.04 firewall的链接。

希望能有所帮助。

票数 6
EN

Stack Overflow用户

发布于 2016-06-16 15:55:04

在服务器的redis配置中将tcp-keepalive设置为60 (设置为0)帮助我解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8537254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档