文档首页/ 分布式缓存服务 DCS/ 最佳实践/ 网络连接/ 使用Nginx实现公网访问DCS
更新时间:2024-10-24 GMT+08:00

使用Nginx实现公网访问DCS

方案概述

当前,华为云DCS的Redis 4.0及以上版本不支持绑定弹性IP,无法直接通过公网访问。

本章节主要介绍通过跳板机访问VPC内Redis 4.0/5.0/6.0单机、主备、读写分离、Proxy集群实例的操作,Cluster集群实例暂不支持使用该方案进行公网访问

图1中安装了Nginx代理工具的ECS就是一台跳板机,它与DCS Redis实例在相同VPC,可通过子网IP访问Redis实例;为ECS绑定弹性IP后,公网可以访问ECS;Nginx支持监听多个端口,并将请求内容转发到不同的后端Redis实例。

图1 通过Nginx访问VPC内DCS Redis

不建议在生产环境中使用公网访问的方式,对于因公网网络性能造成的客户端访问异常不计入SLA。

购买一台ECS

  1. 确认Redis实例所在的虚拟私有云。

    如下图所示,已购买了一个虚拟私有云在“vpc-demo”内的主备实例。
    图2 Redis缓存实例信息

  2. 购买一台同在“vpc-demo”的ECS,并为其绑定一个弹性公网IP,按需选择带宽。

    图3 ECS信息

安装Nginx

购买ECS后,需要在ECS上安装Nginx,本文以ECS操作系统为Centos7.x为例进行安装,不同操作系统命令稍有不同。

  1. 执行以下命令,添加Nginx到yum源。

    sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

  2. 添加完之后,执行以下命令,查看是否已经添加成功。

    yum search nginx

  3. 添加成功之后,执行以下命令,安装Nginx。

    sudo yum install -y nginx

  4. 执行以下命令安装stream模块。

    yum install nginx-mod-stream --skip-broken

  5. 启动Nginx并设置为开机自动运行。

    sudo systemctl start nginx.service
    sudo systemctl enable nginx.service

  6. 在本地浏览器中输入服务器地址(ECS公网IP地址),查看安装是否成功。

    如果出现下面页面,则表示安装成功。

配置Nginx

Nginx安装后,需要配置请求转发规则,告诉Nginx哪个端口收到的请求,应该转发到后端哪个Redis实例。

  1. 打开并修改配置文件。

    cd /etc/nginx
    vi nginx.conf

    配置示例如下,如果有多个redis实例需要公网连接,可以配置多个server,在proxy_pass中配置Redis实例连接地址。

    stream {
        server {
            listen 8080;
            proxy_pass 192.168.0.5:6379;
        }
        server {
            listen 8081;
            proxy_pass 192.168.0.6:6379;
        }
    }

    proxy_pass参数配置值为同一vpc下的Redis实例的IP地址,具体可从缓存实例详情页面的“连接信息”区域获取。

    图4 Nginx配置信息的输入位置

  2. 重启Nginx服务。

    service nginx restart

  3. 验证启动是否成功。

    netstat -an|grep 808
    图5 启动Nginx及验证

    8080和8081两个端口都在监听状态,Nginx启动成功。

(可选)长连接场景

如果用户公网访问时需要使用长连接,那么需要在如上配置Nginx中增加以下配置:
  • Nginx到后端server的超时时间
    stream {
        server {
            listen 8080;
            proxy_pass 192.168.0.5:6379;
            proxy_socket_keepalive on;
            proxy_timeout 60m;
            proxy_connect_timeout 60s;
        }
        server {
            listen 8081;
            proxy_pass 192.168.0.6:6379;
            proxy_socket_keepalive on;
            proxy_timeout 60m;
            proxy_connect_timeout 60s;
        }
    }

    proxy_timeout 默认值是10m(10分钟),可以根据用户需要设为60m或其他值。Nginx官网 proxy_timeout说明

  • 客户端到Nginx的超时时间
    http {
        keepalive_timeout 3600s;
    }

    keepalive_timeout 默认值是75s,可以根据用户需要设为3600s或其他值。Nginx官网 keepalive_timeout 说明

通过Nginx访问Redis

  1. 登录ECS控制台,确认跳板机的安全组规则是否放开,如果没有,则需要为安全组放开8080和8081两个端口。

    1. 单击ECS实例名称,进入ECS详情页面。
    2. 选择“安全组”页签,单击“配置规则”,可进入安全组配置页面。
    图6 进入ECS安全组
    图7 添加安全组入方向规则

  2. 在公网环境中打开Redis命令行界面,输入如下命令,登录与查询都正常。

    公网环境已参考Redis-cli连接中相关步骤,安装Redis-cli客户端。

    ./redis-cli -h {myeip} -p {port} -a {mypassword}

    其中,命令中的{myeip}为主机连接地址,需要填写ECS的弹性IP,端口需要填写ECS上Nginx的监听端口

    如下图所示,设置的2个监听端口分别为8080和8081,对应后端2个Redis实例。

    图8 通过Nginx代理连接第一个Redis实例
    图9 通过Nginx代理连接第二个Redis实例