Skip to content

Commit

Permalink
Improve README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Jackarain committed Nov 30, 2023
1 parent 81d4136 commit 23083fa
Showing 1 changed file with 63 additions and 16 deletions.
79 changes: 63 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
[![CircleCI](https://dl.circleci.com/status-badge/img/gh/Jackarain/proxy/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/Jackarain/proxy/tree/master)
[![actions workflow](https://github.com/jackarain/proxy/actions/workflows/Build.yml/badge.svg)](https://github.com/Jackarain/proxy/actions)


## proxy 项目简介:
## proxy 项目简介

使用 `C++20协程` 通过编写为数不多的代码,实现具有极高性能且支持标准 `socks4`/`socks4a`/`socks5`/`http`/`https``server`/`client proxy` 实现,并且 `client``server` 之间可配置通过 `ssl` 加密通信,可配置多级代理,如下架构:

Expand All @@ -31,45 +30,93 @@

`proxy server`也能同时接受正常 `http` 请求(请求 `http` 静态文件),这时它和一个正常的静态 `web` 文件服务器是完全相同的功能。

## Linux、Windows 平台下编译:
## 编译 proxy 项目

首先执行 `git` 克隆源码(源码无外部依赖,`linux` 平台安装编译工具链: `clang 14``gcc 11` 以上、`cmake``windows` 平台安装 `vs2019` 以上,以及 `cmake`
### 编译环境

```bash
git clone <source url>
要求操作系统安装以下工具:

``` text
版本控制: git
C++ 编译器: Linux 平台 gcc 11 以上, 或 clang 14 以上, windows 平台要求 visual studio 2019 或以上
构建工具: cmake 3.5 以上
如果希望使用 docker 编译, 应当安装好 docker 环境.
```

然后进入源码目录,执行如下操作:
首先执行 `git` 克隆源码(源码无任何外部依赖)

```bash
mkdir build && cd build
git clone <source url>
```

克隆源码完代码后, 就可以开始编译项目了.

### 直接源码编译

进入源码目录,执行如下操作:

```bash
cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
```

上面命令中,`CMAKE_BUILD_TYPE=Debug` 指定了编译为 `Debug` 的类型,如果需要更好的性能,则需要编译为 `Release`

`cmake` 命令成功执行完成后,开始输入以下命令编译:

```bash
make
cmake --build build
```

通常编译过程不会出现问题,如果出现任何问题,请联系作者,并将完整的错误信息保留并报告给作者。

成功编译后,生成的可执行程序将在 `bin` 目录下,其它相关 `lib` 的编译结果 `.a` 文件将在相应项目名称的目录下。

也可以使用 `docker` 编译,在源码目录运行:
### 在 Docker 中编译

在源码目录运行:

```bash
docker build . -t proxy:v1
```

即可自动编译

具体使用参考 `proxy server` 的参数,`proxy server` 它提供了较完整的功能,它可以非常完美的作为 `tun2socks` 后级用于全局代理上网等事宜,`example` 主要用于编程示例。
即可自动编译, 编译完成后, 可执行程序 `proxy_server` 可以在 `docker` 镜像的 `/usr/local/bin/` 目录下找到.

## 使用介绍

`proxy server` 它提供了较完整的功能,它可以非常完美的作为 `tun2socks` 后级用于全局代理上网等事宜,`example` 目录则主要用于编程示例。

`proxy server` 提供了以下参数, 参数除 config 之外, 即可于配置文件也可用于命令行:

| 参 数 | 用法解释 |
| -------- | ----- |
| config | 可配置一个参数配置文件,如 `server.conf`,配置文件内容以`key=value``ini`配置文件的方式保存,如 `server_listen=[::0]:1080` |
| server_listen | 监听的地址以及端口, 格式为 `addr:port`, 支持 `ipv6-only` |
| reuse_port | 启用 `TCP SO_REUSEPORT` 选项, 这个选项只在 `linux` 平台有效 |
| happyeyeballs | 启用 `happyeyeballs` 连接算法, 默认为启用 |
| local_ip | 作为中间级联服务时, 用于向上游服务发起连接时所使用的本地网口 `ip` 地址 |
| auth_users | 认证信息列表, 客户端必须满足其中一对用户/密码才能握手通过, 默认用户密码是 `jack:1111`, 若需要设置为无需要认证代理模式, 必须置 `auth_users` 参数为 "" |
| proxy_pass | 当前服务作为中间级联服务时, `proxy_pass` 指定上游代理服务地址, 格式为 `url` 格式, 如果有认证信息并必须包含认证信息, 如: `https://jack:[email protected]:1080/` |
| proxy_pass_ssl |`proxy_pass` 指定的上游代理服务连接时, 是否通过 `ssl` 安全传输, 注意必须在上游代理服务启用 `ssl` 相关证书域名密钥等信息. |
| ssl_certificate_dir | `ssl` 证书密钥等存放目录, `proxy_server` 会自动查找这个目录下的 `ssl_crt.pem`/`ssl_crt.pwd`/`ssl_key.pem`/`ssl_dh.pem` 这几个固定文件名作为 `ssl` 服务配置, 这样 `ssl` 配置就只需要指定这一个参数 |
| ssl_certificate | 指定证书文件路径 |
| ssl_certificate_key | 指定证书密钥文件路径 |
| ssl_certificate_passwd | 指定证书密钥文件加密密码(如果证书密钥文件有加密), 可以是密码文件也可以直接是密码字符串 |
| ssl_dhparam | 指定 `DH` 参数文件路径(默认可以没有) |
| ssl_sni | 指定 SNI 用于客户端 `ssl` 连接使用(此选项除非你知道在做什么, 否则不需要关心) |
| ssl_ciphers | `ssl` 协议允许的加密算法列表(此选项除非你知道在做什么, 否则不需要关心) |
| ssl_prefer_server_ciphers | 优先使用 server 端加密算法(此选项除非你知道在做什么, 否则不需要关心) |
| http_doc | 启用 `http` 静态文件服务器, 指定静态文件目录 |
| autoindex | 在启用 `http` 静态文件服务的情况下, 启用 `autoindex` 将允许浏览器浏览文件目录列表, 与 `nginx``autoindex` 选项功能一样 |
| logs_path | 日志目录 |
| disable_logs | 是否禁止生成日志 |
| disable_http | 是否禁止 `http` 协议 |
| disable_socks | 是否禁止 `socks5`/`socks4` 协议 |
| disable_insecure | 是否禁止非安全连接(即 `ssl` 连接) |
| scramble | 数据是否启用噪声加扰(即通过随机噪声数据混淆数据传输), 此选项需要在2端同时开启 |
| noise_length | 在启用 `scramble` 的时候, 随机发送的噪声数据最大长度, 默认最大长度为4k |

## 静态文件 http 服务器

`proxy server` 不仅是一个 `proxy` 服务器,同时还可以做为一个真实的静态文件 `http` 服务,且支持 `http range`,所以也可以作为 `http` 视频文件服务器,播放器播放 `http` 视频文件时通过 `http range` 进行 `seek`(快进快退),运行效果(浏览器打开):

Expand Down

0 comments on commit 23083fa

Please sign in to comment.