You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DNS连接Redis服务器?配置Nginx反向代理后连接失败求助

问题分析与解决方案

核心问题

  1. 命令参数使用错误:redis-cli -h IP:PORT的写法完全错误,-h仅接收主机名/IP地址,端口需通过-p参数单独指定。这种错误写法会把IP:PORT当作完整主机名去DNS解析,必然出现“Name or service not known”报错。
  2. Nginx配置逻辑错误:Redis使用自定义二进制协议,而非HTTP/HTTPS协议,你当前配置的是HTTP反向代理,Nginx会把Redis客户端的请求当作HTTP请求处理,协议完全不兼容。

解决步骤

步骤1:修正redis-cli连接命令

  • 直接连接Redis实例的正确命令:
    redis-cli -h 10.63.3.10 -p 6379
    
  • 通过堡垒机代理连接的正确命令(结合SSL加密):
    redis-cli -h devtest-redis.xyz.com -p 443 --ssl
    

步骤2:修改Nginx为TCP代理(关键)

Redis是TCP协议服务,必须用Nginx的stream模块做四层代理,而非HTTP代理。

1. 确认Nginx支持stream模块

执行以下命令查看编译参数,确认包含--with-stream:

nginx -V

如果未包含该参数,需重新编译Nginx并添加--with-stream选项。

2. 替换原有Nginx配置

删除原有的HTTP server配置,添加stream块配置:

stream {
    server {
        listen 443 ssl;
        # 保留原有SSL证书配置
        ssl_certificate /etc/letsencrypt/live/xyz.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/xyz.com/privkey.pem;
        ssl_session_timeout 5m;
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
        ssl_prefer_server_ciphers on;
        # 直接转发到Redis实例的TCP端口
        proxy_pass 10.63.3.10:6379;
    }

    # 80端口不支持Redis协议,直接返回拒绝
    server {
        listen 80;
        return 403;
    }
}

3. 重启Nginx使配置生效

nginx -s reload

步骤3:验证连接

使用修正后的命令测试连接:

redis-cli -h devtest-redis.xyz.com -p 443 --ssl

连接成功后即可正常执行Redis命令。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:16:14