Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/eshengsky/node-proxy
High performance HTTP and reverse proxy server based on Node.js. 基于 Node.js 的高性能 HTTP 及反向代理服务器,类似nginx。
https://github.com/eshengsky/node-proxy
http-proxy nginx node-http-proxy node-proxy node-proxy-server nodejs-server proxy proxy-server reverse-proxy
Last synced: 2 days ago
JSON representation
High performance HTTP and reverse proxy server based on Node.js. 基于 Node.js 的高性能 HTTP 及反向代理服务器,类似nginx。
- Host: GitHub
- URL: https://github.com/eshengsky/node-proxy
- Owner: eshengsky
- License: mit
- Created: 2018-03-03T14:09:19.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-12-14T02:05:02.000Z (almost 2 years ago)
- Last Synced: 2023-03-01T12:22:15.552Z (over 1 year ago)
- Topics: http-proxy, nginx, node-http-proxy, node-proxy, node-proxy-server, nodejs-server, proxy, proxy-server, reverse-proxy
- Language: JavaScript
- Homepage:
- Size: 1.5 MB
- Stars: 70
- Watchers: 7
- Forks: 20
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Node Proxy
基于 Node.js 的高性能 HTTP 及反向代理服务器,类似于 [Nginx](http://nginx.org/)。
[![Build Status](https://travis-ci.org/eshengsky/node-proxy.svg?branch=master)](https://travis-ci.org/eshengsky/node-proxy)
### 为什么使用Node Proxy
如果你的项目符合以下任一点,你就可以尝试使用 Node Proxy:
* 你的项目本身就是基于 Node.js,你希望代理服务器也使用相同的技术;
* 你的团队更熟悉 JavaScript,而不是 C/C++/Lua;
* 你希望有一个 WebUI 配置界面,而不是过时的纯文本配置方式;
* 你想要能随时配置路由规则,但又不想重启代理服务器;
* Nginx 已经满足不了你了 —— 例如:你想在代理端发请求验证用户的登录状态,而不是在浏览器端才去验证;
* ...### 界面预览
![image](./preview.png)
### 功能与特色
* 静态文件处理
* 支持目录或指定单独文件
* 方便的文件选择器
* 支持服务端文件预览
* URL 重写
* 反向代理
* 基于 [node-http-proxy](https://github.com/nodejitsu/node-http-proxy)
* 支持负载均衡
* 支持按服务器性能自定义分配权重
* 自定义响应
* 可以无需发布直接配置页面
* 网页版 [VSCode](https://code.visualstudio.com/) 体验
* 服务端缓存
* 立即从缓存中返回响应内容,极速用户体验
* 支持自定义缓存 key
* 身份验证控制
* 无需开发人员自己判断登录、跳转登录
* WebUI 配置界面
* 美观、优雅、现代的 UI 设计
* 支持内置账号、Gitlab两种登录方式
* 支持权限管理 (只读、可写)
* 修改规则配置后无需重启服务器
* 集成日志查看神器 [chrome-extension-server-log](https://github.com/eshengsky/ServerLog/tree/master/chrome-extension-server-log)
* Node Proxy 处理的网页都支持 [调试模式](#调试模式)### 与 Nginx 的比较
| 服务器 | 并发能力 | 静态资源处理能力 | 配置方式 | 配置备份 | 是否需重启 | 扩展能力 |
|:----------:|----------|---------------|--------------|------------|------------|------------|
| Nginx | 很强 | 很快 | 纯文本配置方式,易拼写错误或重复,配置存储在本地文件中。 | 通常需手动备份,也没有配置修改记录。 | 通常需重启服务。 | 强,但需要掌握 C、Lua 等语言,且要运维去担任开发角色。 |
| Node Proxy | 很强 | 一般(但通常有CDN) | WebUI 配置界面,支持下拉选择、格式检查等,配置存储在数据库中。 | 任何配置操作(包括删除)都会在数据库中存档以供追溯和恢复。| 支持运行时修改并生效,无需重启。 | 强,全端技术统一(JavaScript),可方便地添加任何想要的逻辑。 |### 流程图
Node Proxy 处理请求从接收到响应的基本流程示意:
[Node Proxy Workflow](https://www.processon.com/view/link/5b46c90be4b00c2f18c9b5f7)### 快速开始
#### 下载源码
点击 `Clone or download` 下载源码,或在 [Release](https://github.com/eshengsky/node-proxy/releases) 页面下载指定版本代码。
#### 安装依赖
```bash
$ yarn
```#### 启动 Node Proxy
```bash
$ yarn start
```访问 [http://localhost:9000/node-proxy/](http://localhost:9000/node-proxy/),默认账号:admin/123456.
如果你使用了 [chrome-extension-server-log](https://github.com/eshengsky/ServerLog/tree/master/chrome-extension-server-log),默认 secret key 请填写:`node-proxy_secret_key`.
### 配置说明
Node Proxy 中的配置可分为 2 类:系统配置和规则配置。
* 系统配置
一般是服务器启动时就需要获取并生效的配置参数,如数据库连接等,需要手动修改配置文件,修改后必须重启 Node-Proxy。
配置文件必须放置于 `/config/` 目录下,你可以通过启动服务器时传入变量 `config` 来指定当前环境使用哪个配置文件。如:
```bash
$ config=test node server.js
```会自动读取 `/config/test.js` 配置文件。
如果没有显式传入 `config`, 则会取 `NODE_ENV` 环境变量作为配置文件名,如:```bash
$ NODE_ENV=production node server.js
```
这会自动读取 `/config/production.js` 配置文件。#### 配置项说明
##### ssl
Object 类型,SSL 相关设置##### ssl.enable
Boolean 类型,是否创建 HTTPS 服务器##### ssl.key
String 类型,私钥文件路径,必须是绝对路径##### ssl.cert
String 类型,证书文件路径,必须是绝对路径##### proxyTimeout
Number 类型,反向代理的超时时长,单位毫秒##### keepAlive
Number 类型,反向代理keep-alive时长,单位毫秒##### job
String 类型,自动更新的调度规则,配置格式可参照 https://github.com/node-schedule/node-schedule#cron-style-scheduling##### staticDirPath
String 类型,文件选择器中的静态文件根目录##### debugParam
String 类型,调试模式的参数名##### methods
Array 类型,请求方式配置##### permissions
Array 类型,页面的身份验证##### auth
Object 类型,Node-Proxy系统的访问权限配置##### auth.local
Array 类型,用户名密码方式的用户列表,数组元素是用户对象,属性username是登录名,属性password是密码,密码必须经过md5加密##### auth.gitlab
Object 类型,Gitlab - OAuth2方式登录的相关配置##### auth.gitlab.enable
Booleana 类型,是否开启Gitlab登录方式##### auth.gitlab.baseURL
String 类型,Gitlab的地址,可以配置成内网部署的Gitlab站点URL##### auth.gitlab.clientID
String 类型,Gitlab应用的ID##### auth.gitlab.clientSecret
String 类型,Gitlab应用的Secret##### auth.gitlab.callbackURL
String 类型,Gitlab应用的回调地址##### auth.editableUsers
Array 类型,允许编辑的用户,如:['user1', 'user2'],配置为 ['*'] 则所有用户都有编辑权限##### serverFileCache
Object 类型,静态资源服务端缓存设置##### serverFileCache.enable
Boolean 类型,是否开启服务端缓存##### serverFileCache.max
Number 类型,所有缓存值的总大小限制##### serverFileCache.maxAge
Number 类型,缓存过期时间,单位毫秒##### db
Object 类型,数据库配置##### db.mongodb
String 类型,MongoDB 连接字符串,支持集群##### db.redisKeyPrefix
String 类型,Redis 键前缀##### db.redisConnect
String 或 Array 类型,Redis 连接信息,如果配置为一个数组则视为集群##### serverlog
Object 类型,[ServerLog](https://github.com/eshengsky/ServerLog/blob/master/README_zh.md#configoptions) 模块配置参数* 规则配置
规则配置是指与请求相关联的路由、服务器、缓存等配置信息,通过访问 [http://localhost:9000/node-proxy/](http://localhost:9000/node-proxy/) 进行修改,系统会定时自动更新配置,故修改后无需重启服务器。
### 环境部署
推荐使用 [pm2](https://pm2.io/runtime/) 进行 Node.js 的进程管理和持久运行。
注:你可以指定当前环境要使用的配置文件,详见 [配置说明](#配置说明)。#### 安装pm2
```bash
$ yarn global add pm2
```#### 启动服务
```bash
$ config=production NODE_ENV=production pm2 start server.js -i 0
```### 日志查看
* 本地开发环境,直接在终端中查看日志
* 部署到环境上后,使用 `pm2 logs` 查看日志
* 使用 Chrome 扩展程序 [chrome-extension-server-log](https://github.com/eshengsky/ServerLog/tree/master/chrome-extension-server-log) 在开发者工具 (F12) 中查看日志### 调试模式
可以方便地查看前后端日志、前端错误信息、存储信息等,尤其是在移动设备上。
启动方式:在当前页面 URL 中加入参数 `h5debug=true`。
基于 [eruda](https://github.com/liriliri/eruda) 打造。### 使用帮助
登录后访问 http://localhost:9000/node-proxy/help/ 查看帮助。
### 测试
#### 功能测试
```bash
$ yarn test
```#### 性能测试
见 [benchmark](https://github.com/eshengsky/node-proxy/tree/master/benchmark) 目录。