70行node.js代码实现一个类nginx的http代理(且支持身份验证)
先说说背景。 有时我们需要把一个自身不带有权限验证的服务暴露出去,为了提高安全性,我们希望用户访问该服务时,提供一个校验令牌。无令牌就拒绝访问。 所以我决定挑战下自己,写一个能满足上述需求的http代理,基于Node.js和TypeScript。 我们先看看使用效果。代码已经上传到npm仓库。 # 安装 npm i -g @youmoo/lets-proxy # 运行 PORT=9999 lets-proxy "https://httpbin.org" "hello world" 上述命令先是安装了 @youmoo/lets-proxy 模块,该模块会自动往你的 PATH 中添加一个名为 lets-proxy 的命令;然后执行它。 PORT 参数指定监听的端口,第一个参数 https://httpbin.org 指定要代理哪个服务;第二个参数 hello world 是校验码。 既然上面我们代理了 https://httpbin.org 的网站,我们对比一下通过代理访问和通过原网站访问的实际效果。 访问首页: 我们看到本地出现了 Forbidden 提示。这是因为我们没有在浏览器中设置校验码。我们打开左边页面的chrome控制台,加入一个带有 hello world 字样的 cookie 。 cookie 设置好后,我们再刷新此页面: 可以看到代理成功了。 httpbin.org