使用Midway实现接口代理网关

69 阅读1分钟

背景

工作环境网络条件限制,访问互联网需要通过http代理上网,日常使用浏览器,apifox等通过代理可以正常访问互联网资源,但是在代码工程中调用接口配置代理访问比较麻烦。

解决思路

开发一个接口代理服务器,请求接口先指向代理服务器,然后该代理服务器配置http代理,从而达到访问互联网资源的目的。

sequenceDiagram
user->>myproxy: 用户访问代理
myproxy->>httproxy: 通过http代理访问
httproxy->>3rd: 访问互联网资源
3rd-->>httproxy: 
httproxy-->>myproxy: 
myproxy-->>user: 

myproxy:指新开发的接口代理服务器
httproxy:指公司提供的代理

主要实现步骤

  1. 使用Midway脚手架初始化一个工程 快速入门
  2. 添加http-proxy中间件
    该中间件主要作用是代理请求。参考配置信息如下:
httpProxy: {
    default: {
      // 一些每个策略复用的值,会和底下的策略进行合并

      // 代理超时时间 10s
      proxyTimeout: 10000, 
    },
    strategy: {
      // http代理
      http: {
        match: /\/http\/(.*)$/,
        target: 'http://$1',
      },
      // https代理
      https: {
        match: /\/https\/(.*)$/,
        target: 'https://$1',
      },
    },
  
  1. 使用global-agent配置代理
  2. 忽略SLL校验
    命令行配置NODE_TLS_REJECT_UNAUTHORIZED=0
  3. 配置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
  4. 【可选】配置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"
      }
    }]
  }
  1. 通过代理访问 以访问https://www.xxx.com/api/oauth/token为例,程序里配置地址为 http://ip:port/https/www.xxx.com/api/oauth/token