Linux 中 Nginx 代理 Redis 的详细步骤

 更新时间:2026年05月06日 09:40:20   作者:0xDevNull  
本文介绍了使用Nginx代理Redis的方法,包括检查和配置Nginx的stream模块进行TCP代理,实现安全访问、负载均衡和高可用性,还讨论了Nginx缓存配置与Redis的配合,并提供了安全和优化建议,感兴趣的朋友跟随小编一起看看吧

在实际的生产环境中,我们通常不希望将 Redis 等中间件服务直接暴露在公网中。通过 Nginx 代理 Redis,可以实现安全访问、负载均衡以及高可用性。

本教程将详细介绍如何使用 Nginx 的 stream 模块代理 Redis 的 TCP 连接,以及如何配置 Nginx 缓存来配合 Redis。

️ 1. 环境准备与模块检查

Nginx 代理 Redis 主要依赖 stream 模块(用于 TCP/UDP 代理)。大多数现代 Nginx 版本(1.9.0+)默认包含此模块,但我们需要确认。

检查 Nginx 版本及编译参数:

在终端执行以下命令:

nginx -V

查看输出结果:
寻找 --with-stream 字样。

  • 如果有:直接进行下一步。
  • 如果没有:你需要重新编译 Nginx 并添加该模块。

注意:如果你使用的是包管理器(如 yumapt)安装的 Nginx,通常 stream 模块是默认开启的。

️ 2. 核心配置:使用 Stream 模块代理 TCP 连接

这是最常用的场景,用于隐藏真实的 Redis 服务器地址,或者为 Redis 集群提供统一的入口。

2.1 编辑 Nginx 配置文件

打开主配置文件,通常位于 /etc/nginx/nginx.conf

2.2 添加 Stream 配置块

在配置文件的顶层(与 http 块同级),添加 stream 块。

场景 A:单机代理(基础转发)

stream {
    # 定义 Redis 后端服务器组
    upstream redis_backend {
        server 127.0.0.1:6379; # 真实的 Redis 地址
    }
    # 配置代理服务器
    server {
        listen 6379; # Nginx 监听的端口
        proxy_pass redis_backend; # 转发到后端
        proxy_timeout 3s; # 连接超时
        proxy_connect_timeout 1s;
    }
}

场景 B:高可用与负载均衡(推荐)

如果你有 Redis 主从架构或多个分片,可以配置多个后端。

stream {
    upstream redis_backend {
        # 简单的轮询负载均衡
        server 192.168.1.46:6379;
        server 192.168.1.47:6379;
        # 或者使用权重(性能好的机器权重高)
        # server 192.168.1.46:6379 weight=3;
        # server 192.168.1.47:6379 weight=1;
    }
    server {
        listen 6379;
        proxy_pass redis_backend;
        # 健康检查(Nginx Plus 功能,开源版支持有限,通常依赖被动检查)
        # health_check interval=5s; 
    }
}

2.3 测试并重启

  1. 测试配置语法:
  2. 如果显示 syntax is oktest is successful,则继续。
  3. 重载配置:

2.4 验证代理

使用 redis-cli 连接 Nginx 的 IP,看是否能成功操作 Redis:

redis-cli -h <Nginx服务器IP> -p 6379

3. 进阶配置:Nginx HTTP 缓存配合 Redis

除了 TCP 代理,Nginx 还可以作为 HTTP 反向代理,将动态请求的响应缓存在本地,或者利用 Redis 作为存储后端(需第三方模块)。这里介绍标准的 Nginx 本地文件缓存 模式,这通常用于减轻 Redis 或后端应用的压力。

3.1 定义缓存路径

http 块中定义缓存空间:

http {
    # 定义缓存路径、内存区域大小(keys_zone)、最大磁盘空间(max_size)
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
    server {
        listen 80;
        server_name example.com;
        location / {
            # 启用缓存
            proxy_cache my_cache;
            # 缓存键:根据URL、请求方法等生成唯一标识
            proxy_cache_key "$scheme$request_method$host$request_uri";
            # 缓存有效期:200状态码缓存1小时,其他缓存5分钟
            proxy_cache_valid 200 1h;
            proxy_cache_valid any 5m;
            # 后端地址(这里可以是你的应用服务器,应用服务器再去读Redis)
            proxy_pass http://127.0.0.1:8080;
            # 添加缓存状态头,方便调试
            add_header X-Cache-Status $upstream_cache_status;
        }
    }
}

3.2 创建缓存目录

确保 Nginx 有权限写入缓存目录:

mkdir -p /var/cache/nginx
chown nginx:nginx /var/cache/nginx # 根据实际运行用户调整

️ 4. 安全与优化建议

在使用 Nginx 代理 Redis 时,请务必注意以下几点:

  1. 防火墙配置
    • 虽然 Nginx 代理了 Redis,但建议在防火墙(如 firewalldiptables)中,仅开放 Nginx 的代理端口(如 6379),并严格限制访问来源 IP。
    • 真实 Redis 服务器的 6379 端口 应该只对 Nginx 服务器的内网 IP 开放,不要对公网开放。
  2. SSL/TLS 加密
    • 如果通过公网传输 Redis 数据,建议在 Nginx 层配置 SSL 证书,或者在 Redis 内部开启 TLS 支持,防止密码和数据被嗅探。
  3. 超时设置
    • stream 模块中,合理设置 proxy_timeout。Redis 的长连接如果被 Nginx 过早切断,会导致客户端报错。通常建议设置较长的超时时间或保持默认。
  4. 避免 HTTP 协议混淆
    • 不要试图在 http 块中使用 proxy_pass 直接代理 Redis 的 TCP 端口。Redis 使用的是自定义的 TCP 协议(RESP),不是 HTTP 协议,必须使用 stream 模块进行四层代理。

通过以上配置,你可以构建一个安全、稳定且具备一定缓存能力的 Nginx + Redis 架构。

到此这篇关于Linux 中 Nginx 代理 Redis 的详细步骤的文章就介绍到这了,更多相关Nginx 代理 Redis 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • centos7 docker 修改Nginx文件过程详解

    centos7 docker 修改Nginx文件过程详解

    这篇文章主要介绍了centos7 docker 修改Nginx文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 给小白的 Nginx 30分钟入门指南(小结)

    给小白的 Nginx 30分钟入门指南(小结)

    这篇文章主要介绍了给小白的 Nginx 30分钟入门指南(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Nginx设置Access-Control-Allow-Origin多域名跨域实现

    Nginx设置Access-Control-Allow-Origin多域名跨域实现

    本文主要介绍了Nginx设置Access-Control-Allow-Origin多域名跨域实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • 详解如何设置Nginx实现内外网端口映射

    详解如何设置Nginx实现内外网端口映射

    在 Nginx 中实现内外网端口映射是一种常见的做法,本文详细介绍如何设置 Nginx 实现内外网端口映射,有需要的小伙伴可以跟随小编一起学习一下
    2024-10-10
  • nginx禁用特定ip的方法详解

    nginx禁用特定ip的方法详解

    Nginx是一款轻量级的Web服务器、反向代理服务器及电子邮件代理服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,本文主要介绍利用nginx来禁用特定ip的方法,需要的朋友可以参考下
    2023-09-09
  • Nginx与Tomcat实现动静态分离和负载均衡

    Nginx与Tomcat实现动静态分离和负载均衡

    本篇文章主要介绍了Nginx与Tomcat实现动静态分离和负载均衡,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-10-10
  • nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

    nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应

    本文解析Nginx的-t、-s stop、-s reload命令,分别用于配置语法检查、强制停止服务和重新加载配置,强调在修改配置后需先检查语法,确保服务稳定性
    2025-07-07
  • 利用Nginx反向代理与负载均衡搭建多人测试环境详解

    利用Nginx反向代理与负载均衡搭建多人测试环境详解

    这篇文章主要介绍了利用Nginx反向代理与负载均衡搭建多人测试环境的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-04-04
  • Nginx内网单机反向代理的实现

    Nginx内网单机反向代理的实现

    本文主要介绍了Nginx内网单机反向代理的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 使用Nginx服务器如何实现动静分离和反向代理

    使用Nginx服务器如何实现动静分离和反向代理

    这篇文章主要介绍了使用Nginx服务器如何实现动静分离和反向代理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05

最新评论