koltyakov/expose
GitHub: koltyakov/expose
一款自托管的 HTTP 隧道工具,支持自动 HTTPS、内置 WAF 和实时仪表板,可将本地应用或静态站点安全地暴露到公网。
Stars: 4 | Forks: 0
# expose
127.0.0.1:PORT"] subgraph client["expose client"] Fwd["Forward"] --> Conn["Connect"] --> Reg["Register"] end subgraph server["expose server"] Hub{{"Session hub"}} Route["Route by hostname"] TLS["TLS · WAF"] DB[("SQLite")] Hub --> Route --> TLS Route -. resolve .-> DB end Browser["🌐 Browser"] App -- "HTTP" --> Fwd Hub <-- "WebSocket or HTTP/3 tunnel" --> Conn Conn -- "token" --> Hub Reg -- "API key" --> Route TLS -- "HTTPS *.domain" --> Browser ``` 1. **服务器** 终结 TLS,运行 WAF 检查,并根据主机名将请求路由到正确的隧道 2. **客户端** 通过 API 密钥注册,然后向服务器打开一个持久的 WebSocket 或 HTTP/3 隧道 3. 请求和响应通过隧道以 JSON 信封流传输,大主体使用二进制流 有关完整的请求生命周期和组件分解,请参阅 [架构概览](docs/architecture-overview.md)。 有关传输模式详情(`auto|ws|quic`)和 QUIC 要求,请参阅 [客户端配置](docs/client-configuration.md) 和 [UDP 部署拓扑](docs/udp-deployment-topologies.md)。 ## 快速开始 ### 前置条件 - 一台具有公网 IP 的 **服务器或 VPS**——或者配置了[端口转发](docs/port-forwarding.md)的家庭服务器 - 一个您控制的**域名**(例如 `example.com`) - 一个指向您服务器公网 IP 的 **DNS 通配符 A 记录**(`*.example.com`) ### 1. 安装 从 [Releases](https://github.com/koltyakov/expose/releases) 下载最新的二进制文件并将其放置在您的 `PATH` 中。 ### 2. 服务器 - 初始化并运行 在您的公网机器上,运行交互式设置(会为您写入一个 `.env` 文件): ``` expose server init # guided setup expose server # start the tunnel server ``` 然后为您的客户端创建一个 API 密钥: ``` expose apikey create --name default ``` ### 3. 客户端 - 登录并运行 在您想要暴露的任何机器上: ``` # 登录一次以在本地保存凭证 expose login # 将本地 HTTP 端口(例如 3000)暴露到互联网 expose http 3000 # 或将静态目录作为网站暴露 expose static ``` 打开终端中显示的 URL——就是这样。 有关完整的演练、DNS 设置指南和多路由配置,请参阅 [快速开始](docs/quick-start.md)。 ## 文档 请参阅 [docs/](docs/README.md) 文件夹获取所有指南——服务器和客户端配置、[静态站点](docs/static-sites.md)、TLS 模式、DNS 设置、部署、WAF、自动更新、故障排除等。 ## 致谢 - [ngrok](https://ngrok.com/)——HTTP 隧道的黄金标准,也是巨大的灵感来源。`expose` 的存在是因为我需要对基础设施有更多的自由度和控制权,但 ngrok 铺平了道路。 - [OpenAI](https://openai.com/) 和 [Anthropic](https://anthropic.com/)——AI 辅助开发将整个构建生命周期提升了 10 倍。 ## 许可证 MIT
127.0.0.1:PORT"] subgraph client["expose client"] Fwd["Forward"] --> Conn["Connect"] --> Reg["Register"] end subgraph server["expose server"] Hub{{"Session hub"}} Route["Route by hostname"] TLS["TLS · WAF"] DB[("SQLite")] Hub --> Route --> TLS Route -. resolve .-> DB end Browser["🌐 Browser"] App -- "HTTP" --> Fwd Hub <-- "WebSocket or HTTP/3 tunnel" --> Conn Conn -- "token" --> Hub Reg -- "API key" --> Route TLS -- "HTTPS *.domain" --> Browser ``` 1. **服务器** 终结 TLS,运行 WAF 检查,并根据主机名将请求路由到正确的隧道 2. **客户端** 通过 API 密钥注册,然后向服务器打开一个持久的 WebSocket 或 HTTP/3 隧道 3. 请求和响应通过隧道以 JSON 信封流传输,大主体使用二进制流 有关完整的请求生命周期和组件分解,请参阅 [架构概览](docs/architecture-overview.md)。 有关传输模式详情(`auto|ws|quic`)和 QUIC 要求,请参阅 [客户端配置](docs/client-configuration.md) 和 [UDP 部署拓扑](docs/udp-deployment-topologies.md)。 ## 快速开始 ### 前置条件 - 一台具有公网 IP 的 **服务器或 VPS**——或者配置了[端口转发](docs/port-forwarding.md)的家庭服务器 - 一个您控制的**域名**(例如 `example.com`) - 一个指向您服务器公网 IP 的 **DNS 通配符 A 记录**(`*.example.com`) ### 1. 安装 从 [Releases](https://github.com/koltyakov/expose/releases) 下载最新的二进制文件并将其放置在您的 `PATH` 中。 ### 2. 服务器 - 初始化并运行 在您的公网机器上,运行交互式设置(会为您写入一个 `.env` 文件): ``` expose server init # guided setup expose server # start the tunnel server ``` 然后为您的客户端创建一个 API 密钥: ``` expose apikey create --name default ``` ### 3. 客户端 - 登录并运行 在您想要暴露的任何机器上: ``` # 登录一次以在本地保存凭证 expose login # 将本地 HTTP 端口(例如 3000)暴露到互联网 expose http 3000 # 或将静态目录作为网站暴露 expose static ``` 打开终端中显示的 URL——就是这样。 有关完整的演练、DNS 设置指南和多路由配置,请参阅 [快速开始](docs/quick-start.md)。 ## 文档 请参阅 [docs/](docs/README.md) 文件夹获取所有指南——服务器和客户端配置、[静态站点](docs/static-sites.md)、TLS 模式、DNS 设置、部署、WAF、自动更新、故障排除等。 ## 致谢 - [ngrok](https://ngrok.com/)——HTTP 隧道的黄金标准,也是巨大的灵感来源。`expose` 的存在是因为我需要对基础设施有更多的自由度和控制权,但 ngrok 铺平了道路。 - [OpenAI](https://openai.com/) 和 [Anthropic](https://anthropic.com/)——AI 辅助开发将整个构建生命周期提升了 10 倍。 ## 许可证 MIT
标签:ACME, AppImage, CISA项目, EVTX分析, EVTX分析, HTTP/3, HTTPS, HTTP隧道, JSONLines, Ngrok替代, QUIC, SQL注入防护, WAF, WebSocket, Web应用防火墙, XSS防护, 依赖分析, 内网穿透, 反向代理, 实时仪表盘, 日志审计, 本地开发, 网络安全, 自动TLS, 自托管, 路径遍历防护, 边界网关, 隐私保护, 隧道工具, 零信任, 静态站点发布