nps/README.md

147 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# easyProxy
轻量级、较高性能http代理服务器主要应用与内网穿透。支持多站点配置、客户端与服务端连接中断自动重连多路传输大大的提高请求处理速度go语言编写无第三方依赖经过测试内存占用小普通场景下仅占用10m内存。
## 背景
我有一个小程序的需求但是小程序的数据源必须从内网才能抓取到但是又苦于内网服务器没有公网ip所以只能内网穿透了。
用了一段时间ngrok做内网穿透可能由于功能比较强大配置起来挺麻烦的加之开源版有内存的泄漏很是闹心。
正好最近在看go相关的东西所以做了一款代理服务器功能比较简单用于内网穿透最为合适。
## 特点
- [x] 支持多站点配置
- [x] 断线自动重连
- [x] 支持多路传输,提高并发
- [x] 跨站自动匹配替换
## 安装
1. release安装
> https://github.com/cnlh/easyProxy/releases
下载对应的系统版本即可目前linux和windows只编译了64位的服务端和客户端共用一个程序go语言开发无需任何第三方依赖
2. 源码安装
- 安装源码
> go get github.com/cnlh/easyProxy
- 编译(无第三方模块)
> go build
## 使用
- 服务端
```
./easyProxy -mode server -vkey DKibZF5TXvic1g3kY -tcpport=8284 -httpport=8024
```
名称 | 含义
---|---
mode | 运行模式(client、server不写默认client)
vkey | 验证密钥
tcpport | 服务端与客户端通信端口
httpport | 代理的http端口与nginx配合使用
- 客户端
```
建立配置文件 config.json
```
```
./easyProxy -config config.json
```
名称 | 含义
---|---
config | 配置文件路径
## 配置文件config.json
```
{
"Server": {
"ip": "123.206.77.88",
"tcp": 8284,
"vkey": "DKibZF5TXvic1g3kY",
"num": 10
},
"SiteList": [
{
"host": "server1.ourcauc.com",
"url": "10.1.50.203",
"port": 80
},
{
"host": "server2.ourcauc.com",
"url": "10.1.50.196",
"port": 4000
}
],
"Replace": 0
}
```
名称 | 含义
---|---
ip | 服务端ip地址
tcp | 服务端与客户端通信端口
vkey | 验证密钥
num | 服务端与客户端通信连接数
SiteList | 本地解析的域名列表
host | 域名地址
url | 内网代理的地址
port | 内网代理的地址对应的端口
## 运行流程解析
```
graph TD
A[通过域名访问对应内网服务]-->B[nginx代理转发该域名服务端监听的8024端口]
B-->C[服务端将请求发送到客户端上]
C-->D[客户端收到请求信息,根据host判断对应的内网的请求地址,执行对应请求]
D-->E[将请求结果返回给服务端]
E-->F[服务端收到后返回给访问者]
```
## nginx代理配置示例
```
upstream nodejs {
server 127.0.0.1:8024;
keepalive 64;
}
server {
listen 80;
server_name server1.ourcauc.com server2.ourcauc.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host:8024;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header Connection "";
proxy_pass http://nodejs;
}
}
```
## 域名配置示例
> -server1 A 123.206.77.88
> -server2 A 123.206.77.88
## 跨站自动匹配替换说明
例如访问server1.ourcauc.com该页面里面有一个超链接为10.1.50.196:4000,将根据配置文件自动该将url替换为server2.ourcauc.com以达到跨站也可访问的效果但需要提前在配置文件中配置这些站点。
如需开启请加配置文件Replace值设置为1
>注意:开启可能导致不应该被替换的内容被替换,请谨慎开启
## 操作系统支持
支持Windows、Linux、MacOSX等无第三方依赖库。
## 二级域名泛解析配置详细教程
[详细教程](https://github.com/cnlh/easyProxy/wiki/%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B)