详细可见之前的系列文章。
基于腾讯云CVM搭建stable-diffusion-webui环境
基于腾讯云CVM搭建stable-diffusion-webui环境 二
基于腾讯云CVM(国内)搭建stable-diffusion-webui环境 三
通过本机nginx反向代理stable-diffusion-webui,支持stable-diffusion-webui不支持的功能(比如OPTIONS请求和跨域问题),提升系统健壮性。
CentOS安装nginx
yum install nginx
打开/etc/nginx/nginx.conf文件
支持请求实体最大100MB
http {
...
client_max_body_size 100m;
...
}
支持HTTP代理到7860端口,所有路径。
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路径。
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 和认证标头)来进行跨域请求。
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,所以使用最大权限来支持跨域请求,正式上线的时候,需要缩小权限到最小权限。
CentOS启动nginx
systemctl start nginx
启动stable-diffusion-webui
su - sd
conda activate sd
cd stable-diffusion-webui/
nohup sh webui.sh --listen --port 7860 --enable-insecure-extension-access --api &
如果不希望外网能访问7860端口,则以上最后一句可以改成
nohup sh webui.sh --port 7860 --api &
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。