You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置Digital Ocean上的Redis容器绑定127.0.0.1以提升安全性

解决Redis容器绑定到127.0.0.1的配置方法

既然你的Redis是运行在Docker容器里的,我们不需要修改Droplet主机上的系统配置,而是通过调整Docker Compose的Redis服务配置来实现绑定到127.0.0.1,同时确保外部无法直接访问Redis端口。下面提供两种可靠的方法:

方法一:直接通过command参数指定绑定地址

这是最简单的方式,无需额外配置文件,直接在docker-compose.yml的Redis服务中添加启动命令参数:

# 在你的docker-compose.yml中添加或修改redis服务配置
redis:
  image: redis:latest
  # 让Redis只监听容器内部的回环地址
  command: redis-server --bind 127.0.0.1
  # 端口映射仅绑定主机的127.0.0.1,避免外部网络访问
  ports:
    - "127.0.0.1:6379:6379"
  # 可选:添加持久化存储和自动重启配置
  volumes:
    - redis_data:/data
  restart: unless-stopped

# 定义持久化卷(如果需要)
volumes:
  redis_data:

方法二:使用自定义Redis配置文件

如果你需要更精细的Redis配置(比如密码、持久化策略等),可以创建自定义配置文件:

  1. 在你的项目根目录创建redis.conf文件,至少包含以下内容:
# 绑定到容器内部的回环地址
bind 127.0.0.1
# 启用保护模式,防止未授权访问
protected-mode yes
# 其他你需要的配置(比如requirepass设置密码)
# requirepass your_secure_password_here
  1. 修改docker-compose.yml的Redis服务,挂载这个配置文件:
redis:
  image: redis:latest
  # 挂载自定义配置文件到容器内的Redis配置路径
  volumes:
    - ./redis.conf:/usr/local/etc/redis/redis.conf
    - redis_data:/data
  # 指定使用自定义配置文件启动Redis
  command: redis-server /usr/local/etc/redis/redis.conf
  ports:
    - "127.0.0.1:6379:6379"
  restart: unless-stopped

volumes:
  redis_data:

重启容器并验证配置

完成配置修改后,重启Redis容器使配置生效:

docker-compose up -d redis

验证绑定是否成功

  1. 检查容器内Redis的绑定配置:
# 替换<redis-container-name>为你的Redis容器名称,可通过docker ps查看
docker exec -it <redis-container-name> redis-cli CONFIG GET bind

返回结果应该是["127.0.0.1"],说明绑定成功。

  1. 检查Droplet主机的端口监听情况:
netstat -tulpn | grep 6379

你应该看到类似tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN <pid>/docker-proxy的输出,确认只有127.0.0.1在监听6379端口。

额外注意事项

  • 确保你的Rails应用和Redis在同一个Docker Compose网络中:应用连接Redis时,应该使用服务名redis(比如REDIS_URL=redis://redis:6379/0),而不是localhost,因为容器内的localhost指向容器自身,而服务名会解析到Redis容器的内部IP。
  • 如果你的应用不需要从Droplet主机直接访问Redis,甚至可以去掉ports配置,这样主机上不会暴露任何Redis端口,安全性更高。

内容的提问来源于stack exchange,提问作者Rails Developer

火山引擎 最新活动