使用 Nginx 反向代理可以将本地 Stable Diffusion WebUI 服务映射到域名或公网 IP,适合需要远程访问或统一入口的场景,但必须配置身份验证和 HTTPS 以防未授权访问。
先说结论:Nginx 反向代理是暴露本地 Stable Diffusion 服务的标准方案,比软件内置的 share 功能更可控。
- 适合:需要绑定域名、启用 HTTPS 或集成统一认证的场景。
- 先准备:确认本地服务端口(默认 7860)和 Nginx 已安装。
- 验收:浏览器能加载界面且生成进度条正常走动。
命令速用版
以下配置片段可直接放入 Nginx 的 server 块中,假设本地服务运行在 7860 端口。
location / { proxy_pass http://127.0.0.1:7860; 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_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; client_max_body_size 20M;}为什么会这样
Nginx 默认不支持 WebSocket 协议升级,而 Stable Diffusion WebUI 依赖 WebSocket 传输生成进度。
如果不配置 Upgrade 和 Connection 头部,界面能打开但进度条会卡住不动。此外,生成图片的 POST 请求体可能较大,默认 Nginx 限制会导致 413 错误。
分步处理
第一步:检查本地服务是否可访问。
在服务器终端执行 curl http://127.0.0.1:7860,确认返回 HTML 内容。如果本地无法访问,先排查 SD WebUI 启动参数是否包含 `--listen`。
第二步:创建 Nginx 配置文件。
在 /etc/nginx/conf.d/ 目录下新建 sd.conf,填入“命令速用版”中的 location 块,并补充 server_name 和 listen 端口。
第三步:配置身份验证(强烈建议)。
使用 htpasswd 生成密码文件,并在 Nginx 配置中添加 auth_basic 指令,或启动 SD WebUI 时添加 `--api-auth` 参数。
第四步:重载 Nginx 服务。
执行 nginx -t 检查语法,确认成功后执行 nginx -s reload 应用配置。
怎么验证是否生效
使用浏览器访问配置的域名,观察登录提示是否出现。
点击生成图片,观察进度条是否实时走动而不是卡在 0% 或 100%。检查 Nginx 错误日志 /var/log/nginx/error.log,确认没有 502 或 413 报错。
常见坑
WebSocket 连接失败:表现为进度条不动,原因是缺少 Upgrade 头部配置。
请求体过大报错:表现为生成高分辨率图片时失败,原因是未调整 client_max_body_size。
安全风险:直接暴露 without 密码会导致他人滥用算力,必须开启认证或限制 IP 访问。
常见问题
为什么进度条卡住不动?
因为 Nginx 未正确转发 WebSocket 升级请求,需要添加 Upgrade 和 Connection 头部配置。
需要开启 HTTPS 吗?
如果在公网暴露服务,必须开启 HTTPS 以防止账号密码和传输数据被窃听。
本地服务启动参数要注意什么?
确保启动时加上 `--listen` 参数允许局域网访问,否则 Nginx 无法代理本地回环地址以外的请求。
参考来源
Stable Diffusion WebUI GitHub Wiki - Networking
https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Networking