前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于腾讯云CVM搭建stable-diffusion-webui环境 四

基于腾讯云CVM搭建stable-diffusion-webui环境 四

原创
作者头像
buzzfrog
修改2023-05-19 11:52:26
2.2K0
修改2023-05-19 11:52:26
举报
文章被收录于专栏:云上修行云上修行

前提

  1. 执行nvidia-smi,查看GPU驱动是否安装成功;
    执行nvidia-smi
    执行nvidia-smi
  2. 安装conda环境,并初始化运行在python version 3.10.6的版本;
    python version
    python version
  3. 完成stable-diffusion-webui的安装;
    stable-diffusion-webui目录内容
    stable-diffusion-webui目录内容

详细可见之前的系列文章。

基于腾讯云CVM搭建stable-diffusion-webui环境

基于腾讯云CVM搭建stable-diffusion-webui环境 二

基于腾讯云CVM(国内)搭建stable-diffusion-webui环境 三

目标

通过本机nginx反向代理stable-diffusion-webui,支持stable-diffusion-webui不支持的功能(比如OPTIONS请求和跨域问题),提升系统健壮性。

安装nginx

CentOS安装nginx

代码语言:txt
复制
yum install nginx

配置nginx.conf

打开/etc/nginx/nginx.conf文件

支持请求实体最大100MB

代码语言:txt
复制
http {
    ...
    client_max_body_size 100m;
    ...
}

支持HTTP代理到7860端口,所有路径。

代码语言:txt
复制
http {
    ...
	server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name _;
        location / {
            proxy_pass http://localhost: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;
        }
    }
    ...
}

支持Websocket代理到7860端口,主要是/queue/join路径。

代码语言:txt
复制
http {
    ...
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }
    ...
	    server {
		...
        location /queue/join {
            proxy_pass http://localhost:7860;

            proxy_http_version 1.1;
            add_header 'Access-Control-Allow-Origin' '*'; # 解决websocket的跨域问题

            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;

            proxy_set_header Host $http_host;
        }
		...
    }
}

解决跨域问题。

在传统的同源策略下,浏览器限制了从不同源请求资源的能力,以防止恶意网站窃取用户数据或者发起跨站攻击。CORS(Cross-Origin Resource Sharing)跨域资源共享,是一种用于让 Web 应用程序可以访问其他源(域、协议或端口)下的资源的机制。我们需要通过nginx来支持CORS。

另外,OPTIONS 请求是 CORS(跨域资源共享)规范中定义的一种请求方法。使用 OPTIONS 请求可以让浏览器与服务器之间进行预检,以确保跨域请求的安全性,并允许客户端和服务端之间的数据交互。但stable-diffusion-webui是不支持OPTIONS请求的。因此,也需要nginx支持OPTIONS 请求。

常见的 CORS 头部信息有以下几个:

Access-Control-Allow-Origin:指定哪些来源可以访问资源,可以使用通配符 * 表示所有来源都可访问。

Access-Control-Allow-Methods:指定允许的 HTTP 请求方法,例如 GET、POST、PUT 或 DELETE。

Access-Control-Allow-Headers:指定允许的 HTTP 头部信息,例如 Authorization、Content-Type 或 X-Requested-With。

Access-Control-Allow-Credentials:指定是否允许发送身份验证信息(如 cookie 和认证标头)来进行跨域请求。

代码语言:txt
复制
http {
    ...
	server {
        ...
        location / {
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Allow-Methods' '*';
                add_header 'Access-Control-Allow-Headers' '*';
                add_header 'Access-Control-Allow-Credentials' 'true';
                #
                # Tell client that this pre-flight info is valid for 20 days
                #
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }
			...
			add_header 'Access-Control-Allow-Origin' '*';
			add_header 'Access-Control-Allow-Methods' '*';
			...
        }
		...
    }
    ...
}

注意:我这里是demo,所以使用最大权限来支持跨域请求,正式上线的时候,需要缩小权限到最小权限。

启动nginx

CentOS启动nginx

代码语言:txt
复制
systemctl start nginx

启动stable-diffusion-webui

启动stable-diffusion-webui

代码语言:txt
复制
su - sd
conda activate sd
cd stable-diffusion-webui/
nohup sh webui.sh --listen --port 7860 --enable-insecure-extension-access --api &

如果不希望外网能访问7860端口,则以上最后一句可以改成

代码语言:txt
复制
nohup sh webui.sh --port 7860 --api &

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提
  • 目标
    • 安装nginx
      • 配置nginx.conf
        • 启动nginx
          • 启动stable-diffusion-webui
          相关产品与服务
          云服务器
          云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档