需求

业务某节点无外网访问权限(直接访问外网会被对方追踪到IP地址,存在安全隐患),但自身需要访问一些公共节点,

先决条件

开发会提供访问的http地址(http://47.241.233.90:9100),和服务名称rdb
最后组合成的域名是server_rdb_proxy.com,这里rdb就是服务名称

方案

1、业务机开放所有外网访问权限,出公网走NAT。VPC再配置AMZ的防火墙
缺点是vpc下所有机器都会受防火墙影响,规则不够细化,并且每次需要运维手动操作

2、Nginx(正向)代理
业务机器指定hostsnginx_ip server_rdb_proxy.com
只有配置了nginx正向代理的conf,业务机才有访问的权限,这样的话业务机数据不会对外有泄露的风险,也就是说此时业务机只能访问如下地址的服务

这里proxy_pass不要写upstream,直接转发到对应域名或者地址即可

server {
      listen 80 ;
      server_name server_rdb_proxy.com;
       location  /  {
        proxy_next_upstream  http_502 http_504 http_404  error  timeout invalid_header;
        proxy_pass  http://47.241.233.90:9100;
        proxy_set_header  Host $host;
        proxy_set_header   X-NginX-Proxy    true;
        proxy_set_header 'Access-Control-Allow-Origin' "$http_origin";
        proxy_set_header X-forwarded-for  $remote_addr;
        proxy_set_header x-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header   Proxy "";

  }
        access_log  /tmp/t1.log  main;
        error_log  /dev/null; 
}

最终实现业务机器想访问哪个外部节点必须添加本地hosts和代理nginx配置才可以实现访问
也可以使用squid来实现