如何通过DNS连接Redis服务器?配置Nginx反向代理后连接失败求助
问题分析与解决方案
核心问题
- 命令参数使用错误:
redis-cli -h IP:PORT的写法完全错误,-h仅接收主机名/IP地址,端口需通过-p参数单独指定。这种错误写法会把IP:PORT当作完整主机名去DNS解析,必然出现“Name or service not known”报错。 - 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
相关产品推荐
相关产品推荐

