# ngrok-java **Repository Path**: jo_fei/ngrok-java ## Basic Information - **Project Name**: ngrok-java - **Description**: ngrok java 版,反向代理,内网穿透 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-07-13 - **Last Updated**: 2023-08-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ngrok-java 反向代理-设计方案 ## 1. 功能描述 实现内部应用可外部访问,支持http、https和tcp等 ## 2. 功能性需求 ### 客户端 可以向服务端注册本地端口,转发本地响应到客户端,支持http、https和tcp等。 ### 服务端 存储客户端注册信息,转发客户端响应 ## 3. 非功能性需求 | 项 | 说明 | | :----------: | :----: | | 幂等性 | | | QPS | 低 | | 线程安全 | | | 扩展性 | | | 可回滚 | 无 | | 数据加密 | 无 | | 降级策略 | 无 | | 异常处理策略 | 无 | | 数据时效性 | 同步 | | 超时重试 | 无 | | 性能设计 | 线程池 | ## 4. 详细设计 ### 时序图 ```mermaid %% 时序图例子,-> 直线,->>实线箭头,-->虚线,-->>虚线箭头 sequenceDiagram participant 内网 participant 内网客户端 内网客户端-->>服务端: 注册子域名或端口 loop 检查客户端存活信息 服务端-->>内网客户端: 发送心跳包 内网客户端-->>服务端: 响应心跳包 end Note right of 服务端: 生成流水号加入请求队列 外网->>服务端: 请求 服务端-->>内网客户端: 向客户端发送通知 内网客户端-->>服务端: 创建新连接 服务端->>内网客户端: 发起加密请求信息 内网客户端->>内网: 解密访问内网端口 内网->>内网客户端: 返回访问数据 内网客户端->>服务端: 代理返回访问数据 Note left of 服务端: 根据流水号寻找响应队列 服务端->>外网: 响应请求 ``` ### 开发进度 #### 客户端 已完成 #### 服务端 已完成 #### http/https转发 已完成 #### TCP转发 已完成 ### 配置详解 ```yaml app: name: ngbao-server server: port: 4443 domain: localhost # 公网ip或域名 time-out: 10 # 注册超时时间 秒 heartbeat: 10 # 心跳发送周期 秒 redirect: - web.${server.domain};${server.domain};www.${server.domain} https://${server.domain} listen: # 内置请求前缀 prefix: /bao-api header-size: 8k http: port: 80 https: port: 443 key-store-path: classpath:domain.com.pfx # 证书路径 key-store-password: c1hwe # 证书密码 ```