目录
前言
不知道有没有小伙伴在开发的过程中遇到过:第三方服务提供的接口,只能通过在其IP白名单池里的IP才能访问?
面对这个痛点,有以下几种可能的方案:
申请将本地开发环境的IP地址加入到第三方的IP白名单池里优点:本地环境无需做额外配置
缺点:本地环境IP地址变更频繁,需要频繁申请将IP加入到白名单中,沟通协调成本高
本地只进行代码开发,将服务部署到线上环境进行第三方接口调试优点:无需进行额外的申请或者配置
缺点:开发效率低,功能完成后需要先部署上线再调试,不利于问题的排查和解决
使用远程代理,实现本地IDE <--> 远程代理 <--> 第三方接口优点:开发效率高,在本地IDE里,一边进行代码开发,一边进行第三方接口调试。符合常规开发方式
缺点:需要进行额外的配置
可以看到,方案1和方案2的缺点都是比较明显和难以被忍受的,在实际工作中无法满足我们的需求。而方案3,虽然需要进行一些额外的配置和花费一定的成本,但确是比较合理和容易实现的方案。
所以,本文会用方案3来解决我们开发过程中遇到的这个白名单痛点。
基本思路
在本地IDE和第三方服务器之间架设一个代理服务器。
该代理服务器需要有一个固定的公网IP地址,并申请将该IP地址加入到第三方的IP白名单池里。
配置本地IDE环境,使其请求通过该代理服务器转发到第三方服务器上。如下图所示:
所以,从上面的思路来看,需要完成以下几点:
有一台具备公网固定IP的服务器作为代理服务器(可以在各大公有云提供商上申请一台,不赘述)向第三方申请将该固定IP加入其访问白名单池(非技术问题,不赘述)在代理服务器上配置代理,这里使用的代理软件是Squid本地IDE环境下,配置必要参数来连接代理服务器,这里使用的本地IDE是IntelliJ IDEA具体实现
3.1 在代理服务器上安装配置Squid
Squid Cache(简称为Squid)是HTTP代理服务器软件。Squid用途广泛,可以作为缓存服务器,可以过滤流量帮助网络安全,也可以作为代理服务器链中的一环,向上级代理转发数据或直接连接互联网。
3.1.1 安装Squid(基于Centos系统)
安装:
$ yum install squid -y
$ yum install httpd-tools -y
启动:
$ systemctl start squid.service
关闭
$ systemctl stop squid.service
开机自启动
$ systemctl enable squid.service
3.1.2 配置Squid
打开Squid的配置文件:
$ vi /etc/squid/squid.conf
修改squid.conf文件,这里以只允许通过Squid代理访问juejin.cn为例:
# 只允许代理访问 juejin.cn
acl juejin_url url_regex juejin.cn
http_access allow juejin_url
http_access deny all
# Deny request for original source of a request(让第三方服务器认为请求来自公网IP)
follow_x_forwarded_for deny all
# 3128为默认端口号,建议修改
http_port 0.0.0.0:3128
其他保持默认配置即可。
需要注意的是: 由于本地IDE配置代理不支持密码方式(不确定?如果支持,请不吝赐教),所以squid.conf配置文件里没有加入密码相关的配置
3.2 在本地IDE里配置代理
点击Edit Configurations, 点击左边栏Spring Boot,找到启动类xxxApplication,编辑Environment里的VM options。假设代理服务器的公网IP为:123.123.123.123, 监听的端口号为:3128 (在squid.conf已经指定), 那么在VM options栏填写:
-DproxyHost=123.123.123.123 -DproxyPort=3128