首页 > 抖音笔记内容详情

stable diffusion 实现远程外网访问 2023-05-27 14:09:23 1.63万

不少小伙伴已经在使用Stable Diffusion;通过访问地址127.0.0.1:7860。不过要实现外部网,或者局域网其他设备可以访问,应该怎么做?

通常外网反问分两种情况,一种情况估计是公司级别的部署,通过租赁带有GPU处理器的服务器,实现公网访问。

其次是个人玩家,以自己电脑作为服务主机。但是发现除了本台电脑反问,其他局域网设备无法访问。那应该如何做?

一、局域网设备可以访问:

  • 先关掉Stable Diffusion
  • 找到Stable Diffusion项目代码下的launch.py文件,在第13行的位置,你的应该是这样子:
  • 要设置远程访问,只需要改为:
  • commandline_args = os.environ.get('COMMANDLINE_ARGS', "--listen")
  • 因为远程存在安全问题,可以设置密码登录,像下面这样
  • commandline_args = os.environ.get('COMMANDLINE_ARGS', "--listen --gradio-auth 用户名:密码")
  • 重新运行即可

这样局域网其他电脑、手机可以通过访问局域网地址即可访问,比如部署的电脑ip为:192.168.1.100;那么其他设备通过访问:192.168.1.100:7860即可。

二、外部网络访问自己主机

如果自己拥有NAS群晖,且有域名,自己实现了DDNS动态访问主机 。那么可以通过真正外网访问域名+端口(7860)访问。当然一些路由器也可以不一定一定用群晖。以群晖为例,做了反向代理,访问本地部署stable diffusion的主机。只是很多小伙伴做了反向代理,外部网络也访问成功了。发现作图时候,提示错误。经过浏览器控制台查询报错:WebSocket connection to 'wss://tiven.cn/ws/xxx' failed:。其实这个是Nginx 反向代理时候的错误。


WebSocket 协议与 HTTP 协议不同,但 WebSocket 握手与 HTTP 兼容,使用 HTTP 升级工具将连接从 HTTP 升级到 WebSocket。这允许 WebSocket 应用程序更容易地适应现有的基础架构。例如,WebSocket 应用程序可以使用标准 HTTP 端口80和443,从而允许使用现有的防火墙规则。

WebSocket 应用程序可以在客户端和服务器之间保持长时间运行的连接,从而有助于开发实时应用程序。 Nginx 反向代理用于将连接从 HTTP 升级到 WebSocket 的 HTTP 升级机制使用 Upgrade 和 Connection 头 。反向代理服务器在支持 WebSocket 时面临一些挑战。一个是 WebSocket 是一个逐跳协议,因此当代理服务器拦截客户端的升级请求时,需要向后端服务器发送自己的升级请求,包括相应的头文件。此外,由于 WebSocket 连接长期存在,与 HTTP 使用的典型短期连接相反,反向代理需要允许这些连接保持打开状态,而不是关闭它们,因为它们似乎处于空闲状态。

允许在客户机和后端服务器之间建立隧道,Nginx 支持 WebSocket。对于 Nginx 将升级请求从客户端发送到后台服务器,必须明确设置 Upgrade 和 Connection 标题。

总的来说,就是使用 Nginx 反向代理 WebSocket 服务时需要设置 Upgrade 和 Connection 的 header。

nginx 配置
出现报错时的配置
location /ws {
    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_pass        http://127.0.0.1:9000/ws;
}            
反向代理成功的配置
location /ws {
    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_pass        http://127.0.0.1:9000/ws;
    
    # 关键配置 start
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    # 关键配置 end
}   

当然有群晖不用去找文件改,直接在反向代理中选择指定设定的反向代理,点击进入,然后点击自定义标题——>新增——>WebSocket 然后保存即可。

stable diffusion 实现远程外网访问

相关标签: Stable Diffusion Prompt

发布评论