
本文介绍如何在 centos 服务器上通过 nginx 实现基于子域名的反向代理,将 dev00–dev03.mysite.com 等请求精准分发至不同端口运行的 go web 应用,适用于开发环境快速部署,并对比 nginx 与 caddy 在高并发场景下的适用性。
本文介绍如何在 centos 服务器上通过 nginx 实现基于子域名的反向代理,将 dev00–dev03.mysite.com 等请求精准分发至不同端口运行的 go web 应用,适用于开发环境快速部署,并对比 nginx 与 caddy 在高并发场景下的适用性。
在多 Go 应用共存的开发环境中,让每个应用通过独立子域名(如 dev00.mysite.com)对外提供服务,关键在于HTTP 层的请求路由——这正是反向代理的核心职责。Nginx 是最成熟、轻量且配置灵活的选择,它不处理业务逻辑,仅根据 Host 请求头将流量转发至本地不同端口的 Go 进程(例如 :8000、:8001),完全满足你的开发需求。
✅ 基础 Nginx 反向代理配置(CentOS)
确保已安装 Nginx(sudo yum install nginx)并启动服务(sudo systemctl enable --now nginx)。编辑主配置文件 /etc/nginx/nginx.conf 或更推荐的方式:在 /etc/nginx/conf.d/ 下创建独立配置文件(如 go-apps.conf):
# /etc/nginx/conf.d/go-apps.conf
upstream dev00_backend {
server 127.0.0.1:8000;
}
upstream dev01_backend {
server 127.0.0.1:8001;
}
upstream dev02_backend {
server 127.0.0.1:8002;
}
upstream dev03_backend {
server 127.0.0.1:8003;
}
server {
listen 80;
server_name dev00.mysite.com;
location / {
proxy_pass http://dev00_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name dev01.mysite.com;
location / {
proxy_pass http://dev01_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# 同理配置 dev02 和 dev03...? 验证要点:
- 每个 Go 应用需监听
127.0.0.1(非0.0.0.0)以增强安全性;proxy_set_header确保 Go 应用能正确获取原始请求信息(如真实 IP、协议);- 修改后执行
sudo nginx -t && sudo systemctl reload nginx测试并重载配置。
⚙️ Go 应用示例(标准库 HTTP Server)
// main.go(以 dev00 为例)
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello from dev00.mysite.com (port 8000)")
}
func main() {
http.HandleFunc("/", handler)
log.Println("dev00 server listening on :8000")
log.Fatal(http.ListenAndServe(":8000", nil))
}启动命令:go run main.go &(建议配合 systemd 或 supervisord 管理进程)。
? Nginx vs Caddy:面向未来的选型建议
| 维度 | Nginx | Caddy |
|---|---|---|
| 上手难度 | 配置语法稍严谨,需理解 server/location 结构 |
内置 HTTPS、自动证书(ACME)、配置极简(Caddyfile) |
| 高并发性能 | 极致优化,百万级连接稳定,内存占用低 | 性能优秀(Go 编写),但极端负载下连接复用与缓冲策略略逊于 Nginx |
| 扩展性 | 模块丰富(Lua、OpenResty),生态庞大 | 插件机制活跃,但企业级模块(如 WAF、高级缓存)仍少于 Nginx |
| 适用场景 | 生产环境首选,尤其高负载、需精细调优时 | 开发/中小项目首选,HTTPS 零配置、部署极快 |
✅ 结论:
- 当前开发需求:Nginx 完全胜任,配置清晰可控;Caddy 更省心(尤其需 HTTPS 时),但非必需;
-
未来海量域名+高负载:Nginx 是工业级标准,配合
map指令可优雅实现动态域名映射(避免重复server块),例如:map $host $backend_port { dev00.mysite.com 8000; dev01.mysite.com 8001; dev02.mysite.com 8002; default 8000; } server { listen 80; server_name ~^(.+)$; location / { proxy_pass http://127.0.0.1:$backend_port; # 其他 proxy_* 指令... } }
最后提醒:所有子域名需在 DNS 中解析到该 CentOS 服务器公网 IP,并确保防火墙放行 80 端口(sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload)。至此,你已构建起可横向扩展的 Go 应用网关体系。



















