# go_proxy **Repository Path**: Greenplumwine/go_proxy ## Basic Information - **Project Name**: go_proxy - **Description**: 用go写的类似于nginx的反向代理服务器,支持前缀匹配、正则表达式重写路由、使用代理服务器进行反向代理 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-27 - **Last Updated**: 2025-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: Go语言, 反向代理 ## README # go_proxy ## 介绍 `go_proxy`是一个用Go语言编写的高性能HTTP代理服务器,提供类似Nginx的反向代理功能。该项目旨在提供一个轻量级、可配置的代理解决方案,适用于企业内部服务转发、API网关、路径重写等场景。 ### 核心功能 - HTTP请求反向代理 - 基于路径前缀和正则表达式的灵活路由规则 - 路径重写功能,支持复杂的URL转换 - 详细的日志记录系统,支持多种日志级别 - 支持开机自启动(Linux/macOS) - 支持通过上游代理服务器访问目标服务 - 高性能连接池管理 ## 软件架构 该项目基于几个主要组件: - **配置管理**: 从TOML文件加载服务器配置和路由规则,支持命令行参数覆盖 - **HTTP服务器**: 处理传入的HTTP请求,使用前缀树算法进行高效路由匹配 - **日志系统**: 使用自定义格式和彩色输出,支持内存映射文件写入和日志轮转 - **系统功能**: 提供端口检查、权限验证、系统自动启动设置等功能 ## 安装教程 ### 前提条件 - Go 1.24.2或更高版本(仅编译时需要) - Linux或macOS操作系统 - 具有管理员/root权限(用于设置开机自启) ### 安装步骤 1. 克隆仓库到本地 ```sh git clone cd go_proxy ``` 2. 安装依赖 ```sh go mod download ``` 3. 编译项目 ```sh go build -o go_proxy main.go ``` 4. 运行项目 ```sh ./go_proxy ``` ## 使用说明 ### 配置文件 项目使用两个主要配置文件: #### 服务器配置文件 (server_config.toml) ```toml [server] # 代理服务器监听端口 port = 8080 # 是否检查并设置开机自启脚本(需要root权限) check_startup_script = false # 是否允许重定向 follow_redirects = true # 最大重定向次数 max_redirects = 5 [proxy] # 是否使用上游代理服务器 enable_proxy = false # 上游代理服务器地址 proxy_url = "http://xxx.xxx.xxx.xxx:xxxx" # 上游代理服务器用户名(如需认证) # proxy_url_username = "" # 上游代理服务器密码(如需认证) # proxy_url_password = "" [log] # 日志级别:panic, fatal, error, warn, warning, info, debug, trace log_level = "info" # 日志文件保存路径 log_save_path = "./log/go_proxy.log" # 日志文件保留天数 max_days = 7 ``` #### 路由配置文件 (routes_config.toml) ```toml [[routes]] # 需要匹配的路径前缀 url_path_prefix = "/api/" # 代理目标地址 target = "http://backend-service:8000" [[routes]] # 需要匹配的路径前缀 url_path_prefix = "/legacy/" # 代理目标地址 target = "http://new-service:8000" # 路径重写规则,格式:"^/源路径正则 -> /目标路径" rewrite="^/legacy/app/(\d+)/data -> /new-app/data?id=$1" ``` ### 命令行参数 ```sh # 基本用法 ./go_proxy # 指定配置文件路径 ./go_proxy --server-config=/path/to/server_config.toml --routes-config=/path/to/routes_config.toml # 卸载程序(删除开机自启脚本) ./go_proxy --uninstall ``` ### 启动选项 #### 开发环境运行 ```sh # 使用默认配置 go run main.go # 指定配置文件 go run main.go --server-config=./server_config.toml --routes-config=./routes_config.toml ``` #### 生产环境部署 1. 编译二进制文件 ```sh go build -o go_proxy main.go ``` 2. 准备配置文件 3. 设置开机自启 ```sh # 1. 修改server_config.toml中的check_startup_script为true # 2. 以管理员权限运行 sudo ./go_proxy ``` ## 参与贡献 我们欢迎社区的贡献!你可以通过以下方式参与: - 提交bug报告和功能建议 - 提供补丁代码以改进现有功能或修复问题 - 编写文档或测试用例 ## 技术特性 - **高性能代理**: 基于Go的高性能HTTP服务器和客户端,使用连接池复用连接 - **彩色日志**: 使用带有颜色的日志输出以提高可读性,支持终端和文件输出 - **自动启动设置**: 支持设置代理服务器随系统启动自动运行(Linux/macOS) - **灵活的配置**: 通过TOML配置文件可以轻松调整代理服务器行为 - **路径重写**: 支持使用正则表达式进行复杂的路径重写 - **内存映射日志**: 使用内存映射技术提高日志写入性能 ## 注意事项 - 配置开机自启需要管理员/root权限 - 生产环境建议使用info或error日志级别,减少日志开销 - 路由匹配使用前缀树算法,优先匹配最长路径前缀 - 修改配置文件后需要重启服务使配置生效