Nginx超时配置无效:Ollama流式HTTP请求504问题解决问询
Ollama Llama2 反向代理504超时问题解决配置方案
本地调用Ollama的/api/generate接口流式返回正常,但经Nginx反向代理后出现504超时,仅设置proxy_read_timeout无法解决,核心原因是Nginx默认的缓冲区机制会阻塞流式响应的实时传输,同时需适配HTTP/1.1的分块传输规则。以下是正确的Nginx配置及关键说明:
完整Nginx配置示例
server { listen 80; server_name your-domain.com; # 替换为你的公网域名或IP location /api/ { # 设置足够长的超时时间,单位为秒 proxy_read_timeout 300s; proxy_connect_timeout 30s; proxy_send_timeout 300s; # 禁用缓冲区,确保流式内容实时转发给客户端 proxy_buffering off; proxy_cache off; # 启用HTTP/1.1并适配分块传输 proxy_http_version 1.1; proxy_set_header Connection ''; proxy_set_header Transfer-Encoding ''; # 传递必要的请求头信息 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; # 反向代理到本地Ollama服务 proxy_pass http://localhost:11434/api/; } }
关键参数说明
proxy_buffering off:这是解决流式超时的核心配置。Nginx默认会缓存后端响应内容,直到缓冲区满或响应结束才发送给客户端,禁用后会实时转发Ollama的流式输出,避免因缓存导致的超时。proxy_http_version 1.1+proxy_set_header Connection '':HTTP/1.1支持分块传输编码,清空Connection头可避免Nginx复用连接时的协议兼容问题。proxy_read_timeout 300s:设置后端响应的读取超时时间,单位为秒(注意Nginx的超时参数单位默认是秒,无需写毫秒值)。proxy_set_header Transfer-Encoding '':确保分块传输的响应头正确传递,避免Nginx修改头信息导致客户端无法解析流式内容。
额外排查步骤
- 验证配置生效:执行
nginx -t检查配置语法,无误后执行nginx -s reload重新加载配置。 - 确认Ollama监听范围:确保Ollama服务监听
127.0.0.1(本地调用正常则无需修改),同时云服务器防火墙允许Nginx访问11434端口。 - 检查客户端请求:确保调用
/api/generate接口时使用POST方法,且Content-Type设为application/json,错误的请求格式可能导致后端迟迟不响应引发超时。
内容的提问来源于stack exchange,提问作者user824624
相关产品推荐
相关产品推荐

