如何使用 Nginx 反向代理暴露本地 Stable Diffusion 服务

文章导读
使用 Nginx 反向代理可以将本地 Stable Diffusion WebUI 服务映射到域名或公网 IP,适合需要远程访问或统一入口的场景,但必须配置身份验证和 HTTPS 以防未授权访问。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

使用 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 反向代理暴露本地 Stable Diffusion 服务

第二步:创建 Nginx 配置文件。

在 /etc/nginx/conf.d/ 目录下新建 sd.conf,填入“命令速用版”中的 location 块,并补充 server_name 和 listen 端口。

第三步:配置身份验证(强烈建议)。

使用 htpasswd 生成密码文件,并在 Nginx 配置中添加 auth_basic 指令,或启动 SD WebUI 时添加 `--api-auth` 参数。

第四步:重载 Nginx 服务。

如何使用 Nginx 反向代理暴露本地 Stable Diffusion 服务

执行 nginx -t 检查语法,确认成功后执行 nginx -s reload 应用配置。

怎么验证是否生效

使用浏览器访问配置的域名,观察登录提示是否出现。

点击生成图片,观察进度条是否实时走动而不是卡在 0% 或 100%。检查 Nginx 错误日志 /var/log/nginx/error.log,确认没有 502 或 413 报错。

常见坑

WebSocket 连接失败:表现为进度条不动,原因是缺少 Upgrade 头部配置。

请求体过大报错:表现为生成高分辨率图片时失败,原因是未调整 client_max_body_size。

安全风险:直接暴露 without 密码会导致他人滥用算力,必须开启认证或限制 IP 访问。

如何使用 Nginx 反向代理暴露本地 Stable Diffusion 服务

常见问题

为什么进度条卡住不动?

因为 Nginx 未正确转发 WebSocket 升级请求,需要添加 Upgrade 和 Connection 头部配置。

需要开启 HTTPS 吗?

如果在公网暴露服务,必须开启 HTTPS 以防止账号密码和传输数据被窃听。

本地服务启动参数要注意什么?

确保启动时加上 `--listen` 参数允许局域网访问,否则 Nginx 无法代理本地回环地址以外的请求。

参考来源

Stable Diffusion WebUI GitHub Wiki - Networking

https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Networking