jsproxy 一个基于浏览器端 JS 实现的在线代理

jsproxy功能特点

jsproxy代理主要功能都运行在客户端,最大程度减少服务端计算量。前端通过 Service Worker 拦截和处理资源,同时注入一个 JS 到页面顶部,实现一些辅助功能。

服务端则非常简单,直接利用 nginx 反向代理功能,并且不修改内容(只修改 HTTP 头),避免处理内容的开销,以及原始数据解压再压缩的开销(或者不压缩时流量开销)。

例如现在流行的 br 压缩,压缩比高但压缩成本很大。因此让代理服务器只转发而不操作数据,可节省大量资源。

jsproxy代理将不同的目标站点作为独立的子域名,例如:

这在一定程度上隔离了站点之间的数据,例如 Cookie、Storage 等。

jsproxy 一个基于浏览器端 JS 实现的在线代理
jsproxy

在线预览:https://www.gk.jsproxy.tk

安装部署

  • OpenResty
  • acme.sh
  • node.js / webpack / webpack-cli

CentOS7 可执行 ./server/setup.sh 一键安装。

配置

首先需要一个域名,例如 example.com,解析 @ 和 * 到服务器 IP。

在项目的根目录下新建 dnsconf 文件:

第一个为域名,后面三个参考 acme.sh dns api

执行 ./build.sh。该过程会申请 SSL 证书,时间可能较长。

执行 ./server/run.sh 开启服务。

访问 https://example.com 即可进入首页。

本项目使用了 brotli_static 指令,如果当前的 nginx 不支持,可在 server/nginx.conf 配置中将其注释,或参考 server/setup.sh 重新编译 nginx。

扩展

编辑 sitelist.txt 文件,可配置站点别名,格式为 别名 主机名。配置完成后需要执行 build.sh 更新。

执行 ./server/run.sh reload 重启服务。(该命令的参数和 nginx -s 意义一样,当然也可以自己管理 nginx 服务)

访问 https://别名.example.com 即可进入相应站点。

由于 HTTPS 证书不支持多级通配,所以别名数量是有限的(好像 acme.sh 只支持 30 几个)

对于普通的域名,例如 www.host.com 则转换成 www-dot-host-dot-com.example.com 的格式,即 . 变成 -dot-。(原本就有 -dot- 字符的域名暂未考虑)

标签: