Skip to content

wiki-proxy

https://framewiki.com/wiki-proxy

starfork

介绍

Wiki-Proxy 是基于 Netty 构建的高性能代理服务器,专为开发者设计,提供 HTTP/HTTPS、SOCKS5 等多种代理协议支持。该项目致力于为开发者提供轻量级、高性能的代理解决方案,支持请求转发、负载均衡、流量控制等企业级功能。

项目理念

Wiki-Proxy 秉承开源共享的理念:

  • 开箱即用:简单配置即可启动高性能代理服务
  • 轻量高效:基于 Netty 异步架构,支持高并发访问
  • 功能完善:支持多种代理协议、认证方式和流量管控
  • 易于扩展:模块化设计,支持自定义插件和中间件

核心特性

代理协议支持

  • HTTP/HTTPS 代理:支持标准 HTTP CONNECT 方法
  • SOCKS5 代理:完整的 SOCKS5 协议实现
  • 透明代理:支持透明代理模式
  • 协议转换:支持不同协议间的转换代理

性能与稳定性

  • 异步架构:基于 Netty 事件驱动模型
  • 连接池管理:智能连接复用与管理
  • 内存优化:零拷贝技术与内存池管理
  • 故障恢复:自动重连与故障转移

安全与认证

  • 用户认证:支持用户名密码认证
  • IP 白名单:基于 IP 的访问控制
  • HTTPS 支持:SSL/TLS 加密传输
  • 请求过滤:可配置的请求过滤规则

性能调优

JVM 参数优化

bash
java -Xms2g -Xmx4g \
     -XX:+UseG1GC \
     -XX:MaxGCPauseMillis=200 \
     -XX:+UnlockExperimentalVMOptions \
     -XX:+UseZGC \
     -jar wiki-proxy.jar

Netty 调优

yaml
wiki:
  proxy:
    netty:
      # I/O 线程数
      boss-threads: 1
      worker-threads: 16
      # 缓冲区大小
      receive-buffer-size: 65536
      send-buffer-size: 65536
      # 连接选项
      so-backlog: 1024
      so-keepalive: true
      tcp-nodelay: true

部署指南

使用Jar包部署

1、环境准备

  • 首先确保已安装Java JDK(JRE) 17 + 运行环境;
  • 下载最新的release包:wiki-proxy-server.zip、wiki-proxy-client.zip,最新版本为 v1.0.0,打发行版页面
  • 或者自行下载源码,然后编译成jar包,编译命令:mvn clean install -Dmaven.test.skip=true,也可如下图所示IDEA 打开项目,编译项目,编译成后,在target目录下找到jar包;
keytool

2、部署服务端

  • 需要在服务器上新建目录:/usr/web/wiki-proxy/server/;
  • 需注意程序日志默认输出目录为 /opt/log/wiki-proxy-server/目录下,若不 root 账号需要对账号受权:chown -R wiki:wiki /opt/log/;
bash
chown -R wiki:wiki /opt/log/
  • 将 wiki-proxy-server.zip 解压或自行打包的Jar包上传至服务器部署目录;
  • 配置文件重点修改如下配置:
yaml
spring:
  application:
    name: wiki-proxy-server
  proxy:
    server:
      # 服务端(TCP)端口
      service-port: 10010
      # 暴露端口 可以为多个
      port:
        - 443
      #  证书存放路径
      ssl-key-store-path: "D:\\Project\\wiki-proxy\\server\\proxy-server-web\\src\\main\\resources\\wiki-proxy.jks"
      # 证书密码
      ssl-key-store-password: "wiki-proxy@SaFePwd2025!"
      # 证书类型
      ssl-key-store-type: PKCS12
      # 协议 默认为 TLSv1.2 版本
      protocol: TLSv1.2
      # 算法 默认为 sunx509
      algorithm: sunx509
      # 交互密钥 AES 需要与客户端一致
      aes-key: 8AUWlb+IWD+Fhbs0xnXCCg==
      # 交互签名 key 需要与客户端一致
      token-key: tokenKey
  • 执行如下命令启动服务端完成部署,若需要将配置文件 application.yml 拷贝至 /usr/web/wiki-proxy/server/ 目录下并修改相关配置,默认配置环境只有 test 环境若增加其它环境,则需要在启动命令中修改 -Dspring.profiles.active=xxx 参数,并增加相应的环境配置文件;
bash
nohup java -jar -Dspring.profiles.active=test -Dconfig.file=/usr/web/wiki-proxy/server/application.yml wiki-proxy-server.jar >> /dev/null &

3、部署客户端

  • 需要在服务器上新建目录:/usr/web/wiki-proxy/client/;
  • 需注意程序日志默认输出目录为 /opt/log/wiki-proxy-client/目录下,若不 root 账号需要对账号受权:chown -R wiki:wiki /opt/log/;
bash
chown -R wiki:wiki /opt/log/
  • 将 wiki-proxy-client.zip 解压或自行打包的Jar包上传至服务器部署目录;
  • 配置文件重点修改如下配置:
yaml
spring:
  application:
    name: wiki-proxy-client
  proxy:
    client:
      # 服务端ip
      service-ip: 127.0.0.1
      # 服务端 (TCP) 端口
      service-port: 10010
      ip:
        - 127.0.0.1 # 目标代理ip
      dest-port:    # 目标代理端口
        - 50501
      port:
        - 443 # 服务端暴露端口
      #  证书存放路径
      ssl-key-store-path: "D:\\Project\\wiki-proxy\\server\\proxy-server-web\\src\\main\\resources\\wiki-proxy.jks"
      # 证书密码
      ssl-key-store-password: "wiki-proxy@SaFePwd2025!"
      # 证书类型
      ssl-key-store-type: PKCS12
      # 协议 默认为 TLSv1.2 版本
      protocol: TLSv1.2
      # 算法 默认为 sunx509
      algorithm: sunx509
      # 交互密钥 AES 需要与服务端一致
      aes-key: 8AUWlb+IWD+Fhbs0xnXCCg==
      # 交互签名 key 需要与服务端一致
      token-key: tokenKey
  • 执行如下命令启动服务端完成部署,若需要将配置文件 application.yml 拷贝至 /usr/web/wiki-proxy/client/ 目录下并修改相关配置,默认配置环境只有 test 环境若增加其它环境,则需要在启动命令中修改 -Dspring.profiles.active=xxx 参数,并增加相应的环境配置文件;
bash
nohup java -jar -Dspring.profiles.active=test -Dconfig.file=/usr/web/wiki-proxy/client/application.yml wiki-proxy-client.jar >> /dev/null &

Docker 部署

dockerfile
FROM openjdk:17-jre-slim

COPY wiki-proxy.jar /app/
COPY application.yml /app/

WORKDIR /app
EXPOSE 8080

ENTRYPOINT ["java", "-jar", "wiki-proxy.jar"]

Kubernetes 部署

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wiki-proxy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: wiki-proxy
  template:
    metadata:
      labels:
        app: wiki-proxy
    spec:
      containers:
      - name: wiki-proxy
        image: framewiki/wiki-proxy:1.0.8
        ports:
        - containerPort: 8080
        env:
        - name: JAVA_OPTS
          value: "-Xms1g -Xmx2g"

源码与贡献

编译构建

bash
# 克隆代码
git clone https://gitee.com/cdkjframework/wiki-proxy.git
cd wiki-proxy

# Maven 构建
mvn clean package -DskipTests

# 运行测试
mvn test

# 启动服务
java -jar target/wiki-proxy-1.0.8.jar

贡献指南

  1. Fork 项目到个人仓库
  2. 创建功能分支:git checkout -b feature/new-feature
  3. 提交更改:git commit -am 'Add new feature'
  4. 推送到分支:git push origin feature/new-feature
  5. 创建 Pull Request

社区与支持

交流渠道

  • QQ 群:25056933
  • 微信公众号:维基框架(framewiki-com)
  • 邮件wiki@framewiki.com

问题反馈

许可证

本项目采用 MIT License 开源协议。

版本历史

v1.0.0 (2025-03-28)

  • 第一个正式版本 v1.0.0

注意:本项目仅供学习和合法用途使用,请遵守当地法律法规。

⚡ 反馈与交流

在使用过程中有遇到任何问题或想法,都可以提交 issue

或者加入我的微信:

微信