生产部署:nginx 反向代理配置要点 + systemd 服务文件
小规模上生产,常见组合是:Go 程序监听本机端口、由 systemd 守护,nginx 对外收流量并反代到 Go。以下配置均为示意,请按实际系统与目录调整。
1. systemd 服务文件
编辑 /etc/systemd/system/myapp.service:
[Unit]
Description=Gin API server
After=network.target
[Service]
Type=simple
User=www
WorkingDirectory=/opt/myapp
EnvironmentFile=/etc/myapp.env # 每行一个 KEY=value
ExecStart=/opt/myapp/bin/app -addr=127.0.0.1:8080
Restart=always
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
启用与排查:
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
sudo systemctl status myapp # 查看状态
journalctl -u myapp -f # 跟踪日志
2. nginx 反向代理要点
server {
listen 80;
server_name example.com; # 换成你的域名
client_max_body_size 20m; # 请求体上限,按上传需求调
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
# 透传客户端真实信息,Go 里 c.ClientIP() 才拿得到
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;
# WebSocket 升级必需
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
}
}
静态资源也可交给 nginx 直接托管(location /assets { alias /opt/myapp/static; }),给 Go 减负。
3. 部署注意点
- HTTPS:用证书工具(如 certbot)签证书,443 上做 TLS 终结再反代到内网 Go;Go 侧按
X-Forwarded-Proto判断协议。 - 端口:Go 只监听
127.0.0.1,不直接暴露公网;防火墙只开 80/443。 - 健康检查:加
/healthz接口,供 nginx 与监控探活。 - 优雅退出:Go 里监听
SIGTERM调server.Shutdown,systemd 停服时进程能收尾。
4. 验证步骤
curl -I http://127.0.0.1:8080/healthz # systemd 层面通
curl -I http://example.com/healthz # nginx 层面通
小结
职责划分:systemd 保证进程活着并管理日志,nginx 负责对外暴露、TLS 与透传客户端信息。两者配好后,发版流程就是「上传新二进制 → systemctl restart myapp」。规模再大再上容器编排,下一章讲 Docker。