首页/AI/大模型部署与运维速查/Nginx 配置骨架:一页可抄

Nginx 配置骨架:一页可抄

完整站点骨架:先建 upstream 与限流区,再在 location 里组合 SSE 不缓冲、超时、请求 ID 与鉴权;逐项替换占位符后先校验再 reload。

Nginx 在推理链路的位置

Nginx 用作大模型服务的入口网关:对外终止 TLS、做鉴权与限流,再把请求转发给本机或内网的推理引擎。它本身不理解 token,难点全在连接行为上——流式回答是长时间保持不关闭的响应,默认的缓冲与短超时会把它截断。所以配置的重点是 upstream keepalive、关闭代理缓冲、放大读写超时,以及为每个请求打上可追踪的请求 ID。

基本信息

适用平台Linux + Nginx 1.20 及以上 / OpenResty
配置文件/etc/nginx/conf.d/llm.conf 或 sites-available 下的站点文件
校验与生效nginx -t 校验通过后 systemctl reload nginx
权限要求root 或具备配置目录写权限的运维账号
依赖模块ngx_http_proxy_module、ngx_http_limit_req_module

典型使用场景

  • 给自建推理引擎加一层公网入口:统一做 TLS、域名与访问日志
  • 多引擎负载均衡:upstream 里放多个实例,配合健康检查摘除故障节点
  • 限流与配额:按来源或 API Key 限制速率,保护引擎不被突发流量打满
  • 流式对话转发:让 SSE 逐字返回,而不是等整段生成完才吐给客户端
  • 灰度发布:用独立 server 块或 split_clients 把少量流量导向新版本引擎

配置骨架

配置骨架
upstream llm {
    server 127.0.0.1:8000;      # 引擎监听地址,多实例就多写几行
    keepalive 32;                # 与引擎保持长连接,省掉反复握手
}

limit_req_zone $binary_remote_addr zone=llm:10m rate=10r/s;  # 限流区,按来源 IP

server {
    listen 443 ssl;
    server_name <域名>;
    ssl_certificate     /etc/nginx/ssl/<证书>.pem;
    ssl_certificate_key /etc/nginx/ssl/<私钥>.key;

    location /v1/ {
        limit_req zone=llm burst=20 nodelay;   # 允许 20 个突发,不排队
        proxy_pass http://llm;
        proxy_http_version 1.1;                # keepalive 需要 1.1
        proxy_buffering off;                   # 关键:流式必须关闭缓冲
        proxy_read_timeout 600s;               # 大于最长生成时长
        proxy_set_header Connection "";        # 清空才能复用长连接
        proxy_set_header X-Request-ID $request_id;
        add_header X-Request-ID $request_id always;   # 响应也带回去,便于对账
    }
}

关键指令逐项读法

指令作用配错的后果
proxy_buffering off响应边收边转发开着则流式变成一次性返回,用户长时间无输出后整段刷出
proxy_read_timeout等待上游响应的上限小于生成时长时连接被主动断开,表现为回答中途截断
proxy_http_version 1.1启用 HTTP/1.1 上游停留在 1.0 时 keepalive 不生效,高并发下短连接耗尽端口
limit_req / burst限制单位时间请求数阈值低于真实峰值会误伤正常业务,返回 503
X-Request-ID为请求打唯一标识缺失时日志与客户端报告对不上,排障只能靠时间猜
改完按固定顺序上线:先 nginx -t 校验语法,再 reload(而不是 restart,避免中断已有连接),最后用 curl -N 请求一次,确认响应是逐块到达而不是一次性返回。
Nginx 只是链路中的一环:CDN、企业代理、负载均衡各自的空闲超时都要大于生成的静默间隔,否则超时最短的那一层决定断流时间点。

易错点

  • 不校验直接 reload:语法错误会让整个站点不可用,务必 nginx -t 通过后再重载
  • 只抄骨架不改占位符:证书路径、域名、引擎地址没替换,重载后不是 502 就是证书告警
  • 流式接口落在开启缓冲的 location 里:长生成在第一字节到达前就被判定超时,客户端直接报错
  • 限流键选在共享出口地址上:大量正常用户被算作同一个 key,互相挤占额度
  • upstream 配了固定端口却不配 keepalive:连接数随并发线性上涨,文件描述符先于引擎打满

数据来源与参考

  • Nginx 官方文档(nginx.org/en/docs)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌