背景:开发同事有时会直连线上数据库(不推荐)来拉取数据或者修复数据,一般来说云上数据库都会有开启外网地址的方式,可以通过外网的连接的方式来连接,但某些数据库可能暂不支持开启外网方式访问,下面可以通过nginx代理数据库连接的方式来实现办公室内网去访问线上云数据库的方式,无需开放安全组端口。

思路:

  1. 一台和数据库同网段的云服务器添加自定义域名代理【域名无需添加域名解析】
  2. 客户端添加host映射

    代理ClickHouse栗子

  • 先贴站点代理配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    server {
    listen 80;
    server_name ck.clickhouse.com;

    location / {
    #proxy_set_header X-Forwarded-For $remote_addr;
    #proxy_set_header X-Forwarded-Host $server_name;
    #proxy_set_header Host $host;
    proxy_pass https://clickhouse:8123;
    }

    access_log /var/log/nginx/yun-ck/access.log;
    error_log /var/log/nginx/yun-ck/error.log;
    }

    客户端配置修改

  • 添加host
    1
    2
    # 假设代理所在服务器IP为114.114.114.114
    ck.clickhouse.com 114.114.114.114
  • 代码配置文件修改
    1
    2
    HOST=ck.clickhouse.com
    PORT=80 # 尽量修改为可复用的端口或者在安全组开放较为安全的端口
  • 可视化工具连接修改同上

其他云数据库可做类似配置使用,目前测试可以正常使用的有ElasticSearchClickHouse.

此方式仅限测试或调试使用,生产环境如网络规划复杂不建议使用。