大模型HTTPS证书配置:Nginx反向代理实操指南
给大模型服务配置HTTPS,核心是把证书交给反向代理层处理,而不是直接改模型服务本身。
常见做法是用Nginx监听443端口,把请求转发到本地大模型API端口(比如8000或11434),这样浏览器和客户端就能通过域名安全访问。
下面按零基础可执行的顺序展开。
先确认你的大模型服务跑在哪
动手前先确认三件事:模型服务是否已在本地监听、是否允许被反向代理访问、域名是否已解析到服务器公网IP。
- 查看模型服务监听端口:
ss -tlnp | grep -E '8000|11434|8080',输出中有LISTEN说明服务在跑。 - 本地测试接口:
curl http://127.0.0.1:8000/v1/models,能返回JSON说明模型服务正常。 - 域名解析检查:
ping your-domain.com,返回的IP必须是你当前服务器的公网IP。
如果模型服务只监听127.0.0.1,Nginx在同一台机器上可以正常转发;
如果Nginx在另一台机器,需要让模型服务监听0.0.0.0并放行内网端口,但这会增加暴露面,建议优先同机部署。
申请证书并让Nginx接管443
以Let's Encrypt免费证书为例,前提是域名已解析、80端口可访问。
安装certbot后执行:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com
按提示输入邮箱并同意条款,certbot会自动修改Nginx配置并申请证书。
完成后检查/etc/nginx/sites-enabled/下对应站点文件,应能看到listen 443 ssl和证书路径。
如果你已有商业证书,
把证书文件和私钥上传到服务器,
例如/etc/nginx/ssl/fullchain.pem和/etc/nginx/ssl/privkey.pem,
然后手动写配置。
反向代理配置的关键片段
在Nginx站点配置中加入以下内容,注意proxy_pass指向你的模型服务真实地址:
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8000;
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;
proxy_read_timeout 300s;
proxy_buffering off;
}
}
保存后先测试配置:sudo nginx -t,看到syntax is ok和test is successful再重载:sudo systemctl reload nginx。
proxy_read_timeout建议调大,因为大模型生成响应可能超过默认60秒;proxy_buffering off可避免流式输出被缓冲。
容易踩的坑和对应检查
- 证书申请失败:多半是80端口被防火墙拦截或域名解析未生效。检查
sudo ufw status和curl -I http://your-domain.com。 - 访问返回502:Nginx连不上后端模型服务。用
curl http://127.0.0.1:8000确认后端存活,再检查proxy_pass地址和端口。 - 浏览器提示证书无效:确认访问的是
https://且域名与证书一致,不要用IP访问。 - 流式输出卡住:检查是否开启了
proxy_buffering off,以及后端是否支持流式响应。 - 重载后配置未生效:
nginx -t通过后必须reload,只保存文件不会生效。
验证配置是否真正生效
用两个命令做最终确认:
curl -I https://your-domain.com
curl https://your-domain.com/v1/models
第一条应返回HTTP/2 200或HTTP/1.1 200,且证书信息正常;
第二条应返回模型列表JSON,说明HTTPS到后端链路已打通。
浏览器打开域名时地址栏应显示锁形图标。
如果客户端调用大模型API,把Base URL从http://IP:8000改为https://your-domain.com即可。
证书到期前certbot会自动续期,可用sudo certbot renew --dry-run验证续期流程是否正常。
常见疑问
模型服务本身不支持HTTPS,必须改代码吗?
不需要。HTTPS在Nginx层终止,后端继续用HTTP通信,模型服务无需改动。
可以用IP地址申请证书吗?
Let's Encrypt不为纯IP签发证书,需要域名。内网环境可考虑自签证书,但客户端需要手动信任。
配置后API调用超时怎么办?
先确认proxy_read_timeout是否足够大,再检查后端生成耗时;流式场景同时确认proxy_buffering off已生效。