前言
不知道有没有小伙伴在开发过程中遇到过:第三方服务提供的接口只能通过其IP白名单池中的IP访问?
面对这个痛点,有几种可能的解决方案:
将本地开发环境的IP地址添加到第三方的IP白名单池优点:本地环境不需要额外的配置。
缺点:本地环境的IP地址变化频繁,需要频繁申请在白名单中添加IP,沟通协调成本高。
仅本地代码开发,将服务部署到在线环境进行第三方接口调试优点:不需要额外的应用程序或配置。
缺点:开发效率低。功能完成后,需要在线部署才能进行调试,不利于问题的排查和解决。
用远程代理实现本地IDE -远程代理-第三方接口优点:开发效率高,代码开发和第三方接口调试都在本地IDE。符合常规发展模式。
缺点:需要额外的配置。
可见方案一和方案二的缺点是显而易见,难以忍受的,在实际工作中也无法满足我们的需求。方案三,虽然需要一些额外的配置,也需要一定的成本,但却是一个合理且易于实现的方案。
因此,本文将使用方案3来解决我们在开发过程中遇到的这个白名单痛点。
基本思路
在本地IDE和第三方服务器之间设置代理服务器。
代理服务器需要有固定的公共IP地址,并申请将该IP地址添加到第三方的IP白名单池中。
配置本地IDE环境,使其请求通过此代理服务器转发到第三方服务器。如下图所示:
因此,从上述思路出发,我们需要完成以下几点:
有一个服务器用公共固定IP作为代理服务器(可以向各大公有云提供商申请一个,不要重复),申请第三方将固定IP加入其访问白名单池(不是技术问题,不要重复),在代理服务器上配置代理。这里使用的代理软件是Squid本地IDE环境,并配置必要的参数连接到代理服务器。这里使用的本地IDE是IntelliJ IDEA。
00-1010 3.1在代理服务器上安装和配置Squid
Squid Cache(简称Squid)是HTTP代理服务器软件。鱿鱼被广泛使用。它可以用作缓存服务器,可以过滤流量以帮助网络安全。它还可以用作代理服务器链中的一个链接,将数据转发给上级代理或直接连接到互联网。
3.1.1安装Squid(基于Centos系统)
安装:
$ yum安装squid -y
$ yum安装httpd-工具-y
开始:
$ systemctl start squid.service
关闭
$ systemctl stop squid.service
启动自启动
$ systemctl启用squid.service
3.1.2配置Squid
打开Squid的配置文件:
$ vi /etc/squid/squid.conf
修改Squid.conf文件。这里,以squid代理为例:
#仅允许代理访问juejin.cn。
acl金爵_ URL URL _ regex juejin.cn
允许访问金爵
http _拒绝所有访问
#拒绝对请求原始来源的请求(使第三方服务器认为请求来自公共IP)
follow _ x _ forwarded _ for deny all
# 3128是默认端口号,建议修改。
http_port 0.0.0.0:3128
可以保持其他默认配置。
需要注意的是,本地IDE配置代理不支持密码(不确定?如果支持,请不吝评论),所以squid.conf配置文件中没有密码相关的配置。
3.2在本地集成开发环境中配置代理
单击编辑配置,单击左列中的Spring Boot,找到启动类xxxApplication,然后在环境中编辑虚拟机选项。假设代理服务器的公共IP为:123 . 123 . 123 . 123 . 123 . 123,监视器的端口号为3128(在squid.conf中指定),则填写VM选项列:
-DproxyHost=123 . 123 . 123 . 123-DproxyPort=3128