生产部署: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 里监听 SIGTERMserver.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。

笔记加载中…