linux集群架构--web服务器--nginx检查模块/算法/rewrite知识补充

server/2024/10/22 18:32:16/

web集群-负载均衡

轮询算法

(1)概述

决定负载均衡如何把请求分发给后端节点,这种分发的方式就是轮询算法

(2)轮询算法

面试题:说说常见nginx轮询算法

rr,wrr,ip_hash,lc算法(最小连接数),wlc(加权最小连接数)

负载 说明

  • rr轮询:round robin 轮询,默认的循环访问

  • wrr : 加权轮询,在轮询的基础还是那个增加权重功能,server中weight就是加权轮询

  • ip_hash:ip哈希,只要客户端ip一样,就会一直访问同一个后端节点(用户请求与web服务器绑定)结局会话保持/会话共享,可能导致负载不均

  • xxx_hash:url_hash只要用户访问的url相同,uri相同,就会访问相同的web服务器;缓存服务器:静态资源缓存

  • least_conn:最小连接数,lc算法,也可以配合上权重weight,wlc权重最小连接数

  • 一致性hash算法;

ip_hash轮询逻辑图

在这里插入图片描述

  • ip_hash
upstream lb_pools {ip_hash;server 10.0.0.7:80 weight=1 max_fails=3 fail_timeout=30s;server 10.0.0.8:80 weight=1max_fails=3fail_timeout=30s;
}server {listen 80;server_name lb.wulinlinux.cn;error_log/var/log/nginx/lb-error.lognotice;access_log/var/log/nginx/lb-access.log main;location / {proxy_pass http://lb_pools;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;}
}
  • url_hash
hash $request_uri;

FAQ

Hash算法一台机器宕机的情况下会报错吗?

  • 切换

案例01:对负载均衡进行状态检查

  • 负载均衡状态检查模块upstream check模块,web展示

  • 默认ngx没有安装,是一个第三方的模块,需要编译安装ngx添加这个模块即可.生成ngx命令

  • 步骤:

    1. 找一台db01(无ngx即可)
    2. 编译安装tengine,生成ngx命令,替代lb上ngx的命令即可.
  • 下载tengine代码

#下载#解压
进入到解压后的目录
  • 编译安装
在官网下载之后,传到linux中进行解压
[root~]#tar xf tengine-2.3.3.tar.gz
[root~]#ll
total  2788
-rw--------,  1  root root  1539 jan 9 09:07  anaconda-ks.cfg
drwxrwxr-x,   13 root root  328  Mar 29  2021 tengine-2.3.3
-rw-r--r--    1  root root  2848144 Feb 17 09:34  tengine-2.3.3.tar.gz
[root~]#cd tengine-2.3.3/
[root ~/tengine-2.3.3]#ll安装依赖
./configure 配置(生成Makefile)指定各种位置,否则就会安装到/usr/local/
make      编译(根据Makefile进行编译--->生成对应的命令)
make install 创建目录,复制文件..#安装依赖
yum install -y pcre-devel   openssl-devel#配置的步骤
./configue   --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx  --modules-path=/usr/lib64/nginx/modules  --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log  -http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid  --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp proxy-temp-path=/var/cache/nginx/proxy_temp  --http-fastcgi-temp-path=/var/cache/nginx/fasctgi_temp --
user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module 
with-http_auth_request_module --with-http_dav_module
--with-http_flv_module --with-http_gunzip_module --
with-http_gzip_static_module --with-http_mp4_module
-- with-http_random_index_module --with http_realip_module --with-http_secure_link_module --
with-http_slice_module -- with-http_ssl_module -- with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with -mail_ssl_module --with-stream --with-
stream_realip_module--with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g
-pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'  --add-module=modules/ngx_http_upstream_check_module  
--add-module=modules/ngx_http_upstream_session_sticky_module/#进行编译
make -j 1 #cpu核心总数决定,加速编译#最后的安装(略)
不需要执行make  install
我们不需要在当前db01主机安装tengine检查编译后生成的命令即可
./objs/nginx -V

echo $?
0 执行成功
;~

[root ~/tengine-2.3.3]#scp ./jobs/nginx  lb01:~[root ~]ll nginx
-rwxr-xr-x 1 root root 105432 Feb 17  nginx
[root ~] nginx -V

在这里插入图片描述
这个为新版本编译安装的nginx,旧版本的在/sbin/nginx -V目录下
在这里插入图片描述
在这里插入图片描述

[root ~]#cd /etc/nginx/conf.d/
[root /etc/nginx/conf.d]#vim admin.conf 

在这里插入图片描述
检查语法并进行重启:
在这里插入图片描述
浏览器访问admin.wulinlinux.cn网站:
在这里插入图片描述
将nginx关闭之后,检查模块fall counts会从0逐渐增加数量为终止点,然后报红线提示!!

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e29fbfeef6bf418e956afda13f9dc77e.png)
当重新打开nginx,两次之后显示打开;那能不能十次显示up(打开)状态,或者别的次数呢?- 可以设置想要的几次后状态显示
注意:如果后端web有多个虚拟主机.upstream check进行访问的时候默认使用的ip方式进行访问.在发出http请求的时候指定域名check_http_send "HEAD / HTTP/1.0\r\nHost: lb.oldboylinux.cn\r\n\r\n";

在这里插入图片描述
根据官方案例进行配置:
https://tengine.taobao.org/document_cn/http_upstream_check_cn.html

upstream cluster1 {# simple round-robinserver 192.168.0.1:80;server 192.168.0.2:80;check interval=3000 rise=2 fall=5 timeout=1000 type=http; #相当于curl命令访问curl -I#           检查间隔 ms 成功2次,存活  失败五次认为挂了  超时时间 ms 检查类型check_http_send "Head /HTTP/1.0\r\n\r\n";#           请求方法uri(uri最好反应业务是否正常,找开发写一个页面)check_http_expect_alive http_2xx http_3xx;#认为是成功的状态码 2xx  3xx}
server {listen 80;location /1 {proxy_pass http://cluster1;}location /2 {proxy_pass http://cluster2;}location /status {check_status;access_log   off;#allow 白名单#deny all;}
}
,
找开发写个页面
)check_http_expect_alive http_2xx http_3xx;#认为是成功的状态码
2xx 3xx

upstream_check模块指令

在这里插入图片描述

  • 完整的配置:
upstream lb_pools {server 10.0.0.7:80 weight=1  max_fails=3 fail_timeout=30s;server 10.0.0.8:80 weight=1  max_fails=3 fail_timeout=30s; check interval=3000 rise=2 fall=5 timeout=1000 type=http;check_http_send "HEAD / HTTP/1.0\r\n\r\n";check_http_expect_alive http_2xx http_3xx;
}server {listen 80;server_name admin.wulinlinux.cnerror_log /var/log/nginx/admin.log notice;access_log /var/log/nginx/admin-access.log main;location / {proxy_pass http://admin_pools;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location /lb_status {check_status;access_log off;allow 10.0.0.1;allow 10.0.0.0/24;deny all;}
}

案例02:nginx平滑升级案例

在这里插入图片描述

  • 找一个web服务器
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    现在已经准备好了环境:

完整配置

#检查的当前环境[root /etc/nginx/conf.d]# nginx -v
nginx version: nginx/1.22.0#启动ngx
[root /etc/nginx/conf.d]# systemctl start nginx
[root /etc/nginx/conf.d]# ps -ef |grep nginx
root       7404      1  0 15:32 ?        00:00:00
nginx: master process /usr/sbin/nginx -c
/etc/nginx/nginx.conf nginx      7405   7404  0 15:32 ?        00:00:00
nginx: worker process
root       7407   3011  0 15:32 pts/1    00:00:00 grep --color=auto nginx
#查看pid
[root /etc/nginx/conf.d]# ll /var/run/nginx.pid
-rw-r--r-- 1 root root 5 Sep  7 15:32
/var/run/nginx.pid
[root /etc/nginx/conf.d]# cat /var/run/nginx.pid*
7404#准备升级,备份ngx命令,替代ngx命令
mv /sbin/nginx /sbin/nginx-v1.22.0
mv nginx-tengine-2.3.3  /sbin/nginx
#检查替换后结果
nginx -V
Tengine version: Tengine/2.3.3
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabledconfigure arguments: --prefix=/etc/nginx --sbin-
path=/usr/sbin/nginx --modules-
path=/usr/lib64/nginx/modules --conf-
path=/etc/nginx/nginx.conf --error-log-
path=/var/log/nginx/error.log --http-log-
path=/var/log/nginx/access.log --pid-
path=/var/run/nginx.pid --lock-
path=/var/run/nginx.lock --http-client-body-temp-
path=/var/cache/nginx/client_temp --http-proxy-temp-
path=/var/cache/nginx/proxy_temp --http-fastcgi-
temp-path=/var/cache/nginx/fastcgi_temp --http-
uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-
scgi-temp-path=/var/cache/nginx/scgi_temp --
user=nginx --group=nginx --with-compat --with-file-
aio --with-threads --with-http_addition_module --
with-http_auth_request_module --with-http_dav_module
--with-http_flv_module --with-http_gunzip_module --
with-http_gzip_static_module --with-http_mp4_module
--with-http_random_index_module --with-
http_realip_module --with-http_secure_link_module --
with-http_slice_module --with-http_ssl_module --
with-http_stub_status_module --with-http_sub_module
--with-http_v2_module --with-mail --with-
mail_ssl_module --with-stream --with
stream_realip_module --with-stream_ssl_module --
with-stream_ssl_preread_module --with-cc-opt='-O2 -g
-pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -
fstack-protector-strong --param=ssp-buffer-size=4 -
grecord-gcc-switches -m64 -mtune=generic -fPIC' --
with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-
module=modules/ngx_http_upstream_check_module --add-
module=modules/ngx_http_upstream_session_sticky_module/#准备新老交替
[root ~]# kill -USR2 `cat /var/run/nginx.pid`#生成1新的pid文件和重命名一个pid文件
[root ~]# ll /var/run/nginx.pid*
-rw-r--r-- 1 root root 5 Sep  7 15:34  /var/run/nginx.pid
-rw-r--r-- 1 root root 5 Sep  7 15:32 /var/run/nginx.pid.oldbin[root ~]# cat /var/run/nginx.pid.oldbin
7404[root ~]# ps -ef |grep nginx
root       7404      1  0   15:32 ?        00:00:00
nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx      7405   7404  0 15:32 ?        00:00:00 nginx: worker process
root       7442   7404  0 15:34 ?        00:00:00
nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx      7443   7442  0 15:34 ?        00:00:00 nginx: worker process
root       7463   3011  0 15:35 pts/1    00:00:00 grep --color=auto nginx[root ~]# kill 7404
[root ~]# ps -ef |grep nginx
root       7442      1  0 15:34 ?        00:00:00
nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx      7443   7442  0 15:34 ?        00:00:00 nginx: worker process
root       7483   3011  0 15:37 pts/1    00:00:00 grep --color=auto nginx[root ~]# ss -lntup |grep 80
tcp   LISTEN     0      128       *:80            *:*                   users:
(("nginx",pid=7443,fd=10),("nginx",pid=7442,fd=10))

在这里插入图片描述

web集群-Nginx-rewrite功能

a) nginx重定向概述

  • 重定向:也叫url重定向,也叫url改写

  • 未来需求:

  1. 网站是http(80)—> https(443) URL重定向

用户http://www.baidu.com —> https:///www.baidu.com/

  1. 根据客户端访问类型进行跳转

    ​ 希望根据用户客户端进行判断

    • 如果用户的客户端是iOS,iphone,android,访问 m.wulinlinux.com

    • 否则默认访问www.wulinlinux.com

    ​ www.wulinlinux.cn 如果用户使用的移动端则访问m.wulinlinux.cn URL重定向
    在这里插入图片描述

  2. 新老域名跳转:www.360buy.com —> jd.com

  3. 需要我们调整URL格式:伪静态(搜索引擎收入)运营要求

​ www.wulinlinux.cn/index.php

b) 模块与指令

  • rewrite模块
    在这里插入图片描述

if判断,一般与nginx变量一起使用

return指令

在这里插入图片描述

案例03:如果用户访问/admin/页面返回403

[root ~]#cat /etc/nginx/conf.d/rewrite.wulinlinux.cn.conf
server {listen 80;server_name rewrite.wulinlinux.cn;root /app/code/rewrite;location / {index index.html;}location /admin/ {return 403;}
}

在这里插入图片描述
创建目录:

[root /etc/nginx/conf.d]# mkdir -p /app/code/rewrite/admin/ 
[root /etc/nginx/conf.d]# echo rewrite index  >   /app/code/rewrite/index.html
[root /etc/nginx/conf.d]# echo admin index >/app/code/rewrite/admin/index.html
[root /etc/nginx/conf.d]# curl -H Host:rewrite.wulinlinux.cn http://10.0.0.7/
rewrite index[root /etc/nginx/conf.d]# curl -H Host:rewrite.wulinlinux.cn http://10.0.0.7/admin/
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.22.1</center>
</body>
</html>

这里书写return 403;所有人禁止访问/admin/页面

案例04:域名间跳转

  • 用户访问rewrite.wulinlinux.cn --> www.baidu.com
  • 书写
server {listen 80;server_name rewrite.wulinlinux.cn;return 301 http://www.baidu.com;
}
  • 调试
curl -vL rewrite.wulinlinux.cn
curl -Lv  -H Host:rewrite.wulinlinux.cn  
http://10.0.0.7-L --location跟随跳转,响应是301,302跳转的时候使用.
systemctl reload nginx

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
推荐浏览器插件:

https://www.chromefk.com/redirect-path.html

https://share.learnfk.com/f/18605620-528446570-266096

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

  • return +状态码 与location 或 if
  • 实现跳转
    1. 返回指定的状态码
    2. 域名跳转(新旧域名)
    3. http --> https跳转

if判断

linuxcn_GETPOSTHEADE_475">案例05 rewrite.wulinlinux.cn 网站只允许GET,POST,HEADE三种请求方法,其他禁止访问

  • if用于进行判断,通过nginx中变量
  • 可以比大小
  • 可以进行等于,不等于
  • 也可以进行匹配(过滤)
if指令在nginx中的格式
if (条件) {满足条件执行的内容
}

if指令,格式:

  1. 放置在server,location中

  2. 可以使用的符号

 常用~~*,!~*nginx取反,排除,只能用if
使用到的变量 : $request_method 取出请求
[root /etc/nginx/conf.d]#vim rewrite.conf
server {listen 80;server_name rewrite.wulinlinux.cn;root /app/code/rewrite;if ( $requerst_method !~ "GET|POST" ) {return 403;}location / {index index.html;}
}
  • 测试:
#GET
请求正常
curl   -H Host:rewrite.oldboylinux.cn  http://10.0.0.7
rewrite index#HEAD请求失败
curl  -I  -H Host:rewrite.wulinlinux.cn  
http://10.0.0.7
HTTP/1.1 403 Forbidden
Server: nginx/1.22.1Content-Type: text/html
Content-Length: 153
Connection: keep-alive

set

  • 用于创建nginx变量
#shell写法
wulin=666
echo $wulin
#ngx中写法
set  $变量值;
set $wulin 999;

提示:nginx变量,进行赋值与进行使用都需要加上$符号

[root /etc/nginx/conf.d]# cat rewrite.wulinlinux.cn.conf
server {listen 80;server_name rewrite.wulinlinux.cn;set $wulin "wulin666";return 200  $wulin;
}
[root /etc/nginx/conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf
syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test
is successful
[root /etc/nginx/conf.d]# systemctl reload
nginx  
[root /etc/nginx/conf.d]# curl -H Host:rewrite.wulinlinux.cn 10.0.0.7
wulin666[root /etc/nginx/conf.d]#
[root /etc/nginx/conf.d]# cat rewrite.wulinlinux.cn.conf
server {listen 80;server_name rewrite.wulinlinux.cn;set  $wulin $http_host$request_uri;return 200  $wulin;
}
[
root /etc/nginx/conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf
syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test
is successful[root /etc/nginx/conf.d]# systemctl reload
nginx  
[root /etc/nginx/conf.d]# curl -H Host:rewrite.wulinlinux.cn
10.0.0.7
rewrite.wulinlinux.cn/[root/etc/nginx/conf.d]#
[root /etc/nginx/conf.d]#
[root /etc/nginx/conf.d]# curl -H Host:rewrite.wulinlinux.cn
10.0.0.7/wulin.html
rewrite.wulinlinux.cn/wulin.html

案例06:设置网站是否为维护状态:如果维护状态:返回503状态码,否则正常访问

  • 流程

    1. 设置标记$flag默认是0.
    2. 判断如果$flag的值是1则网站返回503
server {listen 80;server_name rewrite.wulinlinux.cn;root /app/code/rewrite; set  $flag 0;#include conf.d/rewrite-status.var; if ( $flag = 1) {return 503;}location / {index index.html;}
}
  • 变量文件独立开
[root /etc/nginx/conf.d]# cat rewrite.wulinlinux.cn.conf
server {listen 80;server_name rewrite.wulinlinux.cn;root /app/code/rewrite;include conf.d/rewrite-status.flag;if ( $flag = 1 ) {return 503;}location / {
index index.html;}
}[root /etc/nginx/conf.d]# cat rewrite-status.flag
set $flag 0[root /etc/nginx/conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf
syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test
is successful
[root /etc/nginx/conf.d]# systemctl reload nginx  
[root /etc/nginx/conf.d]# curl -H Host:rewrite.wulinlinux.cn
10.0.0.7
rewrite.wulinlinux.cn
[root /etc/nginx/conf.d]# sed -i 's#0#1#g' rewrite-status.flag
[root /etc/nginx/conf.d]# cat rewrite-status.flag
set $flag 1;
[root /etc/nginx/conf.d]# systemctl reload nginx
[root /etc/nginx/conf.d]# curl -H Host:rewrite.wulinlinux.cn 10.0.0.7
<html>
<head><title>503 Service Temporarily
Unavailable</title></head>
<body>
<center><h1>503 Service Temporarily Unavailable</h1>
</center>
<hr><center>nginx/1.22.0</center>
</body>
</html>
set $flag 0;
if ( $flag ) {return 503;
}
if ( $flag = 1) 执行 return 503;if ( $flag = 1) 不会执行 503

小结
一般很少单独使用,一般与if搭配使用

rewrite指令

rewrite指令

  • rewrite正则用于匹配用户请求的uri.
  • 命令的格式与sed 's###g’类似,实现替换功能,rewrite替换url内容.(改写)
    在这里插入图片描述
    在这里插入图片描述

案例07:域名跳转

[root /etc/nginx/conf.d]# vim rewrite.conf 
server {listen 80;server_name rewrite.wulinlinux.cn;#return 301 http://www.baidu.com$request_uri;#http://rewrite.wulinlinux.cn/images/wulin.txt#http://rewrite.wulinlinux.cnrewrite ^(.*)$   http://www.baidu.com$1 permenant(永久);
}

在这里插入图片描述
浏览器访问http://rewrite.wulinlinux.cn/wulin.txt:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Rewrite各种标记

在这里插入图片描述

  • 测试break与last的代码:
server {listen 80;server_name flag.wulinlinux.cn;root /app/code/flag;error_log /var/log/nginx/flag-error.log notice;rewrite_log on; #需要错误日志debug.... noticelocation / {rewrite /1.html /2.html ;rewrite /2.html /3.html ;}location /2.html {rewrite /2.html /3.html ;}location /3.html {rewrite /3.html /a.html ;}
}
echo 1.html url >/app/code/flag/1.html
echo 2.html url >/app/code/flag/2.html
echo 3.html url >/app/code/flag/3.html
echo a.html url >/app/code/flag/a.html
echo b.html url >/app/code/flag/b.html1.访问/1.html显示a.html内容
[root /etc/nginx/conf.d]# curl -H Host:flag.wulinlinux.cn 10.0.0.7/1.html
a.html url
2.访问 /2.html显示a.html内容
[root /etc/nginx/conf.d]# curl -H Host:flag.wulinlinux.cn 10.0.0.7/2.html
a.html url
3.在rewrite /1.html /2.html的时候加上标记break标记.rewrite /1.html /2.html break;执行完成rewrite后直接结束.
ver {listen 80;erver_name flag.wulinlinux.cn;root /app/code/flag;error_log /var/log/nginx/flag-error.log notice;rewrite_log on; #需要错误日志debug .... noticelocation / {rewrite /1.html /2.html break;rewrite /2.html /3.html ;}location /2.html {rewrite /2.html /3.html ;}location /3.html {rewrite /3.html /a.html ;}
}
[root /etc/nginx/conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf
syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root /etc/nginx/conf.d]# systemctl reload nginx
[root /etc/nginx/conf.d]# curl -H Host:flag.wulinlinux.cn 10.0.0.7/1.html 2.html url4.在rewrite /1.html /2.html的时候加上标记last标记.注意这一步修改下配置文件,创建新的页面b.html.
[root /etc/nginx/conf.d]# cat flag.wulinlinux.cn.conf
server {listen 80;server_name flag.wulinlinux.cn;root /app/code/flag;error_log /var/log/nginx/flag-error.log notice;rewrite_log on; #需要错误日志debug ....noticelocation / {rewrite /1.html /2.html last;rewrite /2.html /3.html ;}location /2.html {rewrite /2.html /b.html ;}location /3.html {rewrite /3.html /a.html ;}
}
[root /etc/nginx/conf.d]# curl -H Host:flag.wulinlinux.cn
10.0.0.7/1.html
b.html url

http://www.ppmy.cn/server/65234.html

相关文章

【HarmonyOS开发】弹窗交互(promptAction )

实现效果 点击按钮实现不同方式的弹窗showToast showDialog showActionMenu 代码实现 1.引入’ohos.promptAction’ import promptAction from ohos.promptAction;2.通过promptAction 实现系统既定的弹窗 import promptAction from ohos.promptAction;Entry Component st…

基于 Gunicorn、Flask 和 Docker 的高并发部署模型

要构建一个基于 Gunicorn、Flask 和 Docker 的高并发部署模型&#xff0c;你需要分几个步骤来准备和部署你的应用。以下是一个详细的步骤指南&#xff0c;包括从创建 Flask 应用到使用 Docker 和 Gunicorn 进行部署的全过程。 第一步&#xff1a;创建 Flask 应用 首先&#x…

tg小程序前端-dogs前端源码分析

tg小程序前端-dogs前端源码分析 前端源码 index.html <!DOCTYPE html> <html lang="en"><head><script src="https://telegram.org/js/telegram-web-app.js" onload="window.Telegram.WebApp.expand(); window.Telegram.WebA…

使用工作流产生高质量翻译内容的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

ArcGIS Pro SDK (九)几何 10 弧

ArcGIS Pro SDK &#xff08;九&#xff09;几何 10 弧 文章目录 ArcGIS Pro SDK &#xff08;九&#xff09;几何 10 弧1 构造圆弧 - 使用内部点2 构造圆弧 - 使用弦长度和方位3 构建圆弧 - 使用中心点、角度和半径4 构造椭圆弧 - 使用中心点和旋转角度5 构造圆弧 - 使用中心点…

COMX-P2020、COMX-P1022 vxWorks系统开发主机

采用 PowerPC处理器 P2020、P1022&#xff0c;提供vxworks6.9开发环境和BSP源码&#xff0c;具有千兆以太网&#xff0c;调试串口&#xff0c;4个PCIe插槽&#xff0c;支持PCIe 1.0a和msi中断&#xff0c;底板板载一块Xilinx CPLD XC95144&#xff0c;提供ISE14.7安装包和veril…

nvm 安装指定版本后执行npm操作报错Error: Cannot find module ‘@npmcli/config‘

1、报错 使用nvm安装指定版本的node&#xff0c;安装成功&#xff0c;查询node版本也正常&#xff0c;但是查看npm版本或执行npm操作时就会报错&#xff0c;Error: Cannot find module ‘npmcli/config’&#xff0c;应该是nvm下载node包不全或是其他原因。 D:\nvm1.1.7-setup…

昇思25天学习打卡营第02天|张量 Tensor

一、什么是张量 Tensor 张量是一种特殊的数据结构&#xff0c;与数组和矩阵非常相似。张量&#xff08;Tensor&#xff09;是MindSpore网络运算中的基本数据结构。 张量可以被看作是一个多维数组&#xff0c;但它比普通的数组更加灵活和强大&#xff0c;因为它支持在GPU等加速…