admin管理员组

文章数量:1571083

原文网址:Redis--设置外部(公网)可以访问_IT利刃出鞘的博客-CSDN博客

简介

本文介绍如何将Redis设置为外网可以访问。

默认情况下,Redis服务端只允许它所在服务器上的客户端访问,如果Redis服务端和Redis客户端不在同一个机器上,就要进行配置。

1.修改bind

修改redis.conf

配置方法

原来的配置:

bind 127.0.0.1

修改为:

#bind 127.0.0.1

或者:

bind 0.0.0.0

详解

来源于redis.conf的github地址:https://github/redis/redis/blob/unstable/redis.conf

说明

        默认情况下,如果没有指定bind配置指令,则 Redis 监听来自服务器上所有可用网络接口的连接。可以使用bind配置指令来监听一个或多个选定的接口,在bind后拼接一个或多个 IP 地址即可。例如:

bind 192.168.1.100 10.0.0.1
bind 127.0.0.1 ::1

        警告:如果运行 Redis 的计算机直接暴露在互联网上,绑定到所有的接口是很危险的,并会将实例暴露给互联网上的每个人。因此,默认情况下,我们取消注释以下绑定指令,这将强制 Redis 只监听 IPv4 回环接口地址(这意味着 Redis 只接受来自运行它的计算机上的客户端的连接)。

        如果你确定希望你的实例能够监听所有的接口,只需要注释下面的这一行即可。

bind 127.0.0.1

网络接口

        bind 是 network interfaces,即网络接口(网卡)。服务器可以有一个或者多个网络接口。可以使用 ifconfig 查看当前 Linux 服务器上的网络接口。

$ ifconfig
docker0   Link encap:Ethernet  HWaddr 3A:F3:20:12:AE:6A
          inet addr:192.168.42.1  Bcast:0.0.0.0  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:362879 errors:0 dropped:0 overruns:0 frame:0
          TX packets:894703 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:28218097 (26.9 MiB)  TX bytes:1326305089 (1.2 GiB)

eth0      Link encap:Ethernet  HWaddr 00:16:3E:08:18:35
          inet addr:10.25.102.37  Bcast:10.25.103.255  Mask:255.255.252.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4958304 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2766733 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:534516269 (509.7 MiB)  TX bytes:13382719049 (12.4 GiB)

eth1      Link encap:Ethernet  HWaddr 00:16:3E:08:13:6B
          inet addr:120.76.207.187  Bcast:120.76.207.255  Mask:255.255.252.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13183600 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14070363 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6460933699 (6.0 GiB)  TX bytes:8462002985 (7.8 GiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:156288093 errors:0 dropped:0 overruns:0 frame:0
          TX packets:156288093 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:19039024606 (17.7 GiB)  TX bytes:19039024606 (17.7 GiB)

veth802443e Link encap:Ethernet  HWaddr 56:E8:12:D0:88:96
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:120 errors:0 dropped:0 overruns:0 frame:0
          TX packets:162 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:44625 (43.5 KiB)  TX bytes:18533 (18.0 KiB)

我的服务器是阿里云的ECS,当前有5个网络接口。

网络接口说明
docker0安装 docker 时自动创建的网桥
eth0阿里云内网接口
eth1阿里云公网接口
lo本地回环接口
veth88f3e3c运行 docker 容器创建的 veth pair 的一端

        所以,如果要让公网可以连接该服务器上的 Redis 服务,除了直接注释掉 bind 这一行来绑定到所有的网络接口之外,更正确的做法应该是不注释,再绑定多 eth1 这个公网接口,地址是 120.76.207.187。

bind 127.0.0.1 120.76.207.187

然后重启下 redis 服务即可,这样配置,Redis 就只监听 IPv4 的本地回环接口和公网接口。

2.关闭保护模式

修改redis.conf

配置方法

protected-mode no

        Reids默认开启保护模式(protected-mode yes),开启之后只有本机可以连接,其他机器无法连接。

        保护模式开启的两个条件

  1. 没有使用bind
  2. 没有设置密码(即:没有设置requirepass)

3.设置Redis密码

修改redis.conf

requirepass yourPassword

4.允许端口通过防火墙

设置iptables规则,允许外部访问6379端口。

iptables -I INPUT 1 -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
iptables save

本文标签: 公网Redis