Skip to content

wiki-proxy

https://framewiki.com/wiki-proxy

starfork

一句话说明 ​

Wiki-Proxy 是基于 Netty 的开源代理服务,面向开发与内网转发场景,支持 HTTP/HTTPS、SOCKS5 等协议。本页承接特性、调优与部署说明;仅供学习与合法用途。

项说明
适合谁需要自建轻量代理 / 内网转发、可自行管理证书与网络暴露面的团队
运行时JDK17+
协议MIT
边界开源组件 ≠ 托管代理服务;示例密钥必须替换后才能用于生产

介绍 ​

Wiki-Proxy 基于 Netty 构建,提供 HTTP/HTTPS、SOCKS5 等多种代理协议支持,并覆盖请求转发、负载相关能力与基础流量管控等常见需求。

项目理念 ​

  • 开箱即用:简单配置即可启动代理服务
  • 轻量高效:基于 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 包;
wiki-proxy build

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: "/etc/wiki-proxy/wiki-proxy.jks"
      # 证书密码(请替换为自有强密码)
      ssl-key-store-password: "CHANGE_ME"
      # 证书类型
      ssl-key-store-type: PKCS12
      # 协议 默认为 TLSv1.2 版本
      protocol: TLSv1.2
      # 算法 默认为 sunx509
      algorithm: sunx509
      # 交互密钥 AES(需与客户端一致,请自行生成后替换)
      aes-key: "CHANGE_ME_BASE64_AES_KEY"
      # 交互签名 key 需要与客户端一致
      token-key: "CHANGE_ME_TOKEN_KEY"
  • 执行如下命令启动服务端。若需要将配置文件 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: "/etc/wiki-proxy/wiki-proxy.jks"
      # 证书密码(请替换为自有强密码)
      ssl-key-store-password: "CHANGE_ME"
      # 证书类型
      ssl-key-store-type: PKCS12
      # 协议 默认为 TLSv1.2 版本
      protocol: TLSv1.2
      # 算法 默认为 sunx509
      algorithm: sunx509
      # 交互密钥 AES(需与服务端一致,请自行生成后替换)
      aes-key: "CHANGE_ME_BASE64_AES_KEY"
      # 交互签名 key 需要与服务端一致
      token-key: "CHANGE_ME_TOKEN_KEY"
  • 执行如下命令启动客户端。若需要将配置文件 application.yml 拷贝至 /usr/web/wiki-proxy/client/ 并修改相关配置:
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

问题反馈 ​

常见问题 ​

Wiki-Proxy 能直接当公网代理服务用吗? ​

可以自建部署,但必须自行完成证书、密钥轮换、访问控制与合规评估。文档示例不可直接用于生产。

示例配置里的密码和密钥怎么办? ​

文中均为占位符(CHANGE_ME)。上线前请替换为自有密钥,并限制管理面与监听端口的网络暴露。

问题应提到哪个仓库? ​

请提交到 Wiki-Proxy Issues,不要提到 Wiki-Framework 仓库。

许可证 ​

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

版本历史 ​

v1.0.0 (2025-03-28) ​

  • 第一个正式版本 v1.0.0

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

反馈与交流 ​

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

或加入微信交流:

微信

Last updated: