nps/README.md

276 lines
6.6 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代理服务器主要应用于内网穿透。支持三种模式**http代理请求**、**tcp隧道模式**、**sock5代理模式**,可根据自身需求进行选择。
支持客户端与服务端连接中断自动重连多路传输大大的提高请求处理速度go语言编写无第三方依赖经过测试内存占用小普通场景下仅占用10m内存。
## 目录
1. [背景](#背景)
2. [安装](#安装)
2. [http代理请求](#http代理请求)
3. [tcp隧道模式](#tcp隧道模式)
4. [sock5代理模式](#sock5代理模式)
5. [操作系统支持](#操作系统支持)
## 背景
我有一个小程序的需求但是小程序的数据源必须从内网才能抓取到但是又苦于内网服务器没有公网ip所以只能内网穿透了。
用了一段时间ngrok做内网穿透可能由于功能比较强大配置起来挺麻烦的加之开源版有内存的泄漏很是闹心。
正好最近在看go相关的东西所以做了一款代理服务器功能比较简单用于内网穿透最为合适。
## 安装
1. release安装
> https://github.com/cnlh/easyProxy/releases
下载对应的系统版本即可目前linux和windows只编译了64位的服务端和客户端共用一个程序go语言开发无需任何第三方依赖
2. 源码安装
- 安装源码
> go get github.com/cnlh/easyProxy
- 编译(无第三方模块)
> go build
## http代理请求请求
### 场景及原理
较为适用于http也就是web站点的穿透服务端与客户端之间建立连接服务端收到http请求后将请求发送到客户端客户端再执行这个请求并将结果返回给服务端服务端收到后再返回给用户。
### 特点
- [x] 支持gzip压缩,减小流量消耗
- [x] 支持多站点配置
- [x] 断线自动重连
- [x] 支持多路传输,提高并发
- [x] 跨站自动匹配替换
### 使用
- 服务端
```
./easyProxy -mode httpServer -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 | 内网代理的地址对应的端口
Replace | 是否自动匹配替换[(查看场景)](https://github.com/cnlh/easyProxy/issues/1)
### 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
>注意:开启可能导致不应该被替换的内容被替换,请谨慎开启
### 二级域名示范
[二级域名](https://github.com/cnlh/easyProxy/wiki/%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B)
## tcp隧道模式
### 场景及原理
较为适用于处理tcp连接例如ssh同时也使用于http等访问服务端的8024端口相当于访问内网目标ip的目标端口构成如下所示的隧道。
服务端<----->客户端端<----->目标地址
### 使用
- 服务端
```
./easyProxy -mode tunnelServer -vkey DKibZF5TXvic1g3kY -tcpport=8284 -httpport=8024 -target=10.1.50.203:80
```
名称 | 含义
---|---
mode | 运行模式(client、server不写默认client)
vkey | 验证密钥
tcpport | 服务端与客户端通信端口
httpport | 代理的http端口与nginx配合使用
target | 目标地址,格式如上
- 客户端
```
建立配置文件 config.json
```
```
./easyProxy -config config.json
```
名称 | 含义
---|---
config | 配置文件路径
### 配置文件config.json
```
{
"Server": {
"ip": "123.206.77.88",
"tcp": 8284,
"vkey": "DKibZF5TXvic1g3kY",
"num": 10
}
}
```
名称 | 含义
---|---
ip | 服务端ip地址
tcp | 服务端与客户端通信端口
vkey | 验证密钥
num | 服务端与客户端通信连接数
## sock5模式
### 场景及原理
主要用于sock5代理也就是和ss类似不过是代理内网。使用此模式时可在非内网环境下配置本机的sock5代理服务器ip、sock5代理端口即可实现sock5代理达到访问内网的网站的效果。
### 使用
- 服务端
```
./easyProxy -mode sock5Server -vkey DKibZF5TXvic1g3kY -tcpport=8284 -httpport=8024
```
名称 | 含义
---|---
mode | 运行模式(client、server不写默认client)
vkey | 验证密钥
tcpport | 服务端与客户端通信端口
httpport | 代理的http端口与nginx配合使用
target | 目标地址,格式如上
- 客户端
```
建立配置文件 config.json
```
```
./easyProxy -config config.json
```
- 需要使用内网代理的机器
```
配置sock5即可ip为外网服务器ip端口为httpport即可在外网环境使用内网啦
```
名称 | 含义
---|---
config | 配置文件路径
### 配置文件config.json
```
{
"Server": {
"ip": "123.206.77.88",
"tcp": 8284,
"vkey": "DKibZF5TXvic1g3kY",
"num": 10
}
}
```
名称 | 含义
---|---
ip | 服务端ip地址
tcp | 服务端与客户端通信端口
vkey | 验证密钥
num | 服务端与客户端通信连接数
## 操作系统支持
支持Windows、Linux、MacOSX等无第三方依赖库。