背景
工作环境网络条件限制,访问互联网需要通过http代理上网,日常使用浏览器,apifox等通过代理可以正常访问互联网资源,但是在代码工程中调用接口配置代理访问比较麻烦。
解决思路
开发一个接口代理服务器,请求接口先指向代理服务器,然后该代理服务器配置http代理,从而达到访问互联网资源的目的。
sequenceDiagram
user->>myproxy: 用户访问代理
myproxy->>httproxy: 通过http代理访问
httproxy->>3rd: 访问互联网资源
3rd-->>httproxy:
httproxy-->>myproxy:
myproxy-->>user:
myproxy:指新开发的接口代理服务器
httproxy:指公司提供的代理
主要实现步骤
- 使用Midway脚手架初始化一个工程 快速入门
- 添加http-proxy中间件
该中间件主要作用是代理请求。参考配置信息如下:
httpProxy: {
default: {
// 一些每个策略复用的值,会和底下的策略进行合并
// 代理超时时间 10s
proxyTimeout: 10000,
},
strategy: {
// http代理
http: {
match: /\/http\/(.*)$/,
target: 'http://$1',
},
// https代理
https: {
match: /\/https\/(.*)$/,
target: 'https://$1',
},
},
- 使用global-agent配置代理
- 忽略SLL校验
命令行配置NODE_TLS_REJECT_UNAUTHORIZED=0
- 配置dev脚本
cross-env NODE_ENV=local NODE_TLS_REJECT_UNAUTHORIZED=0 GLOBAL_AGENT_HTTP_PROXY=http://xxx:9000 mwtsc --watch --run @midwayjs/mock/app.js
- 【可选】配置PM2脚本
module.exports = {
apps : [{
name: "hn-proxy",
script: "./bootstrap.js",
instances : "max",
exec_mode : "cluster",
env: {
"NODE_ENV": "production",
"NODE_TLS_REJECT_UNAUTHORIZED": "0",
"GLOBAL_AGENT_HTTP_PROXY": "http://xxx:9000"
}
}]
}
- 通过代理访问
以访问
https://www.xxx.com/api/oauth/token
为例,程序里配置地址为http://ip:port/https/www.xxx.com/api/oauth/token