Nginx优化llm Api转发性能

给局域网的cpa和axonhub都整了个域名, 然后测试的时候发现, 只要用域名, 输出就是一段一段往外蹦, 一点都不爽, 不丝滑. 问了下AI发现其实是nginx的问题.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
upstream llm_backend {
    server 127.0.0.1:8000;
    # 启用长连接池,避免频繁TCP握手,大幅提高吞吐量
    keepalive 32;
}

server {
    ...
    http2 on;
    client_max_body_size 20M;
    # 仅为/v1 的api接口配置优化, 页面无所谓
    location /v1/ {
        proxy_pass http://llm_backend;
        # 关闭响应缓冲(最关键),确保SSE流能实时转发
        proxy_buffering off;
        # 关闭响应缓存,避免错误缓存
        proxy_cache off;
        # 关闭请求体缓冲,处理长Prompt时降低延迟
        proxy_request_buffering off;
        # 强制使用HTTP/1.1,以支持keepalive和chunked
        proxy_http_version 1.1;
        # 显式开启分块传输编码
        chunked_transfer_encoding on;
        # 连接到后端服务器的超时时间
        proxy_connect_timeout 300s;
        # 向后端发送请求的超时时间
        proxy_send_timeout 300s;
        # 从后端读取响应的超时时间,需大于模型最大推理时长
        proxy_read_timeout 3600s;
        # 为流式路径禁用gzip压缩,它可能与流式传输冲突
        gzip off;
        # 关闭Nagle算法,减少小包延迟,对token级流式传输至关重要
        tcp_nodelay on;
        # 明确告知后端不要缓存
        proxy_set_header Cache-Control 'no-cache, no-store, must-revalidate';
    }
}
Licensed under CC BY-NC-SA 4.0
记录平时瞎折腾遇到的各种问题, 方便查找