dproxy

一个类似Fiddler的Web调试代理.A proxy designed for web developing, works like Fiddler

Usage no npm install needed!

<script type="module">
  import dproxy from 'https://cdn.skypack.dev/dproxy';
</script>

README

Web调试代理 Dproxy

按照配置的规则列表提供灵活的http代理服务.
(暂时只支持普通http请求,后续添加websocket和https的支持)

主要面向前端开发环境做的设计,由此省掉繁琐的绑host操作

文档还需要完善,有问题可以直接联系我.

主要功能

普通的代理服务器功能:返回浏览器指定请求的结果

遵照一个规则列表,将特殊设置的地址用特殊的handler处理

作为一个简单的静态服务器:在前端开发的测试环境中替代nginx

使用方法

下载安装

不需要额外安装依赖模块,直接下载代码 > node cli.js

  1. 首先,安装Nodejs
  2. git clone git://github.com/deemstone/Dproxy.git /你的电脑/任意目录..
  3. 将工程下的./bin目录添加到系统环境变量$PATH中
  4. 在命令行中执行dproxy
  5. 根据需要编辑配置文件

配置文件

配置文件都放在./conf目录下,整体仿造nginx的设计

  • ./conf/dproxy.conf 是代理服务器全局配置,可以更改端口号

    工程下自带一个样例: dproxy.conf.sample
    直接拷贝,修改使用

  • ./conf/rule 文件夹下的所有*.rule文件都是"代理规则"配置文件

    也自带了一个样例: rule.sample

代理规则

每个.rule文件被加载到服务中被当做一个"规则分组"(group)
分组之间保持独立(不会互相覆盖)
根据分组启用的先后顺序,后启用的分组,其中的规则会优先匹配
只能操作分组的"启用/停用"(不提供单条规则的操作)

.rule文件主要由三大部分: handler定义块, oneline配置块, 分域名配置块

handler定义块:

这里定义的handler仅可以在当前分组中引用,全局配置文件(dproxy.conf)中同名的handler会被忽略
handler的书写格式见.sample样例文件

目前dproxy支持的handler类型:

  • local - 本地文件
  • remote - 某指定host请求
  • opm - 从opm服务获取文件
  • online - 代理到线上环境

其中,opm是一个前端的包管理工具,用python编写项目地址

分域名配置块

每个域名写一个块(多个域名用逗号隔开)
rewrite 类似nginx的用法
default 如果没有找到匹配的规则,默认使用该条配置的handler处理该域名下的请求

匹配条件只写除去域名剩下的路径部分,可以使用*作为通配符,用(xx|xxx)表示"或"操作

oneline配置块

意思是"单行配置",用一行配置添加一条规则,匹配条件需要写完整的url,也可以使用通配符

交互命令

proxy启动之后会进入一个简单的命令行模式,按一下Tab键列出所有命令:

  • groups 查看所有加载上来的规则分组,列表中的"*"号标示已启用的分组
  • up 启用一个分组 up
  • down 停用一个分组 down
  • ls 查看"某分组|全部"规则列表 ls []
  • roll 实时的滚动显示正在处理的请求,在滚动模式下按"q"键退回到命令行模式
  • status 查看服务器状态(内存,平台…)
  • exit 停止服务并退出

处理一个请求的流程

  1. 接收到一个请求
  2. 查看该请求url是否与规则列表中某条规则匹配
  3. 如果匹配,查询到该条规则指定的数据源(handler)
  4. 根据handler的类型,把参数传递给相应的代理模块
  5. 由代理模块发出请求,将处理结果返回浏览器
  6. 如果不匹配,默认直接从线上取回该内容返回浏览器