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