Nginx笔记(安装+使用)

news2024/12/23 6:02:25

Nginx开源版安装、启动

版本区别

Nginx开源版

Nginx plus 商业版

openresty

Tengine

安装

将.tar.gz放到linux系统下, 使用tar -zxvf减压

进入减压目录>>>命令安装指令:安装到usr/local/nginx路径下

./configure --prefix=/usr/local/nginx

make && make install

出现以下报错安装依赖包

  • checking for os
    + Linux3.10.0-693.e17.x86_64 x86_64
    checking for c compiler ... not found
    
    /configure: error: C compiler cc is not found
    

    安装gccyum install -y gcc

  • /configure: error: the HTp rewrite module requires the PCRE library.
    You can either disable the module by using --without-http_rewrite_moduleoption, or install the PCRE 1ibrary into the system, or build the PCRE library
    staticaly from the source with nginx by using --with-pcre=<path> option.
    

    安装perl库yum install -y pcre pcre-devel

  • /configure: error: the HTTP gzip module requires the zlib library.
    You can either disable the module by using --without-http_gzip_moduleoption, or install the zlib library into the system, or build the zliblibrary
    statically from the source with nginx by using --with-zlib=<path> option.
    

    安装zlib库yum install -y zlib zlib-devel

启动

进入安装好的目录/usr/local/nginx/sbin

./nginx 启动
./nginx -s stop 快速停止
./nginx -s quit 优雅关闭, 在退出前完成已接受的连接请求
./nginx -s reload 重新加载配置

安装成系统服务

创建服务脚本

vim /usr/lib/systemd/system/nginx.service

服务脚本内容

脚本内容出现的路径为安装到的指定路径下,如有不同请手动修改

[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

服务命令说明

systemctl daemon-reload			重新加载系统服务
systemctl start nginx.service	启动服务
systemctl stop nginx.service	停止服务
systemctl status nginx.service	查看服务状态
systemctl reload nginx.service	重新启动(重新加载配置文件)
systemctl enable nginx.service	开机启动

目录结构

  • conf
    用来存放配置文件相关的目录
  • html
    用来存放静态文件的默认目录
  • logs
    日志文件目录
  • sbin
    nginx的主程序
  • 后缀为_temp都是nginx启动后新建的目录

基本运行原理

请添加图片描述

Nginx基础配置

请添加图片描述
nginx.conf为主配置文件

最小配置文件

初始化配置文件nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;
    
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

将注释全部去掉后的文件

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            #访问80端口,找到nginx目录下的html目录下的index.html
            index  index.html index.htm;	 
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

文件配置说明

  • worker_processes : 工作的进程个数, 默认为1 , 表示开启一个子进程

  • events : 事件驱动模块

    • worker_connections : 每个worker进程可以接受的连接数
  • http

    • include : 引用另外的配置文件, 空格后面跟配置文件名

      mime.types文件为请求头说明的访问文件格式

    • default_type: mime.types文件中没有的格式,默认为default_type的格式

    • sendfile : 文件零拷贝 默认 on (使用linux的 sendfile(socket, file, len) 高效网络传输)

    • keepalive_timeout : 保持连接的超时时间

    • server : 可以理解为一个虚拟主机(vhost)

      • listen : 监听的端口号
      • server_name : 主机名/域名
      • location : URI
        • root : 相对路径/usr/local/nginx/下的某个目录
        • index : 默认主页文件
      • error_page : 报错代码后跳转的路径

sendfile未启动
请添加图片描述
sendfile启动
请添加图片描述

虚拟主机

原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务
nginx.conf中一个server可以理解为一个虚拟主机
多个serverlisten存在相同端口会报错

server {
	listen       80;    					端口号
	server_name  localhost;					主机名/域名
	
	location / {
    	 root   html;
     	 # 访问80端口,找到nginx目录下的html目录下的index.html
    	 index  index.html index.htm;	 
  	}
}

nginx.conf配置文件中server下的server_name域名解析规则

  • server_name匹配规则
    server_name匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。
  • 完整匹配
    可以在同一server_name中匹配多个域名
    server_name vod.mmban.com www1.mmban.com;
  • 通配符匹配
    server_name *.mmban.com;
  • 通配符结束匹配
    server_name vod.*;
  • 正则匹配
    server_name ~^[0-9]+\.mmban\.com$;

正向代理、反向代理模型

反向代理

以代理服务器来接受连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器,而且整个过程对于客户端而言是透明的。

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

正向代理

一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后由代理向原始服务器转交请求并将获得的内容返回给客户端。

在这里插入图片描述

传统互联网项目

在这里插入图片描述

负载均衡

负载均衡也是Nginx常用的一个功能。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。

简单示例(关键字: proxy_pass)

修改nginx.conf配置文件中http>server>location部分(不支持https)

server {
	listen       80;    					端口号
	server_name  localhost;					主机名/域名
	
	location / {
		proxy_pass http://www.baidu.com;
		# 当使用proxy_pass负载均衡时, 以下内容不生效, 直接注释掉
    	# root   html;
    	# index  index.html index.htm;	 
  	}
}

简单负载均衡(关键字: upstream)—轮询示例

修改nginx.conf配置文件>>http>upstreamserver同级

upstream 自定义名称 {
	server 192.168.137.139:80;
	server 192.168.137.133:80;
}

server {
	listen       80;
	server_name  localhost;
	
	location / {
		proxy_pass http://自定义名称;
	}
}

负载均衡策略

  • weight :权重
  • down : 当前server暂不参与负载均衡(下线)
  • backup : 预留的备份服务器; 其它所有的非backup机器down或者忙的时候,请求backup机器。
  • max_fails : 请求失败次数限制
  • fail_timeout : 经过max_fails后服务暂停时间
  • max_conns : 限制最大的连接数

简单示例

upstrem 自定义名称{
  server 192.168.137.137:80 weight=1;
  server 192.168.137.137:8080 down;
  server 192.168.137.137:8081 backup;
  server 192.168.137.137:8082 max_fails=1 fail_timeout=10s max_conns=1024;
  server unix:/tmp/backend3;
} 

负载均衡调度算法

  • 轮询:默认算法按时间顺序逐一分配到不同的后端服务器;
  • 加权轮询:Weight值越大,分配到访问几率越高;
  • ip_hash:为每一个请求访问的IP的hash结果分配,可以将来自一个IP的固定访问一个后端服务器;
  • url_hash:需要安装模块安装访问的URL的hash结果来分配,这样每个URL定向到同一个后端服务器
  • least_conn:按照某台机器最少连接数的进行分配访问;
  • hash关键数值: hash 自定义 KEY

轮询

权重

upstream 自定义名称{
  server 192.168.137.137:8081 weight=1;
  server 193.168.137.137:8080 weight=9; 
} 

ip_hash

ip_hash 会话粘连, 用户访问的时候请求可能分发到不同服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

# 会话粘连可以理解为用户持续访问一个后端机器
upstream 自定义名称 {
  ip_hash;
  server 192.168.137.137:8080;
  server 192.168.137.137:8081;
} 

least_conn

将请求分配到连接数最少的服务上

upstream 自定义名称 {
  least_conn;
  server 192.168.137.137:8080;
  server 192.168.137.137:8081;
} 

fail

fair(需要使用第三方软件)按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream 自定义名称 {
  fair;
  server 192.168.137.137:8080;
  server 192.168.137.137:8081;
} 

url_hash

url_hash(需要使用第三方软件):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream 自定义名称 {
  hash $request_uri;
  hash_method crc32;
  server 192.168.137.137:8080;
  server 192.168.137.137:8081;
} 

动静分离

动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路

在这里插入图片描述

简单示例

nginx所在服务器ip为192.168.137.139
137nginx配置文件修改如下(将137反向代理到139上, 将css/js/img静态文件静态化到139服务器中)

server {
  listen       80;
  server_name  localhost;
	
  location / {
		proxy_pass http://192.168.137.137:8080;
	}

  # 所有静态请求都由nginx处理,存放目录为nginx中的html
  location ~*(css|js|css) {
      root   html;
      index  index.html;
  }
  
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
      root   500.html;
  }
} 

location匹配顺序

  • 多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
  • 普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
  • 当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
  • 所有类型location存在时,“=”匹配 > “^~“匹配 > 正则匹配 > 普通(最大前缀匹配)

URLRewrite

rewrite是URL重写的关键指令, 根据regex(正则表达式)部分类容, 重定向到replacement, 结尾是flag标记

rewrite <regex>	<replacement> [flag];
关键字	正则		替代内容		  flag标记

关键字: 		其中关键rewrite不能改变
正则: 		perl兼容正则表达式语句进行规则匹配
替代内容: 	将正则匹配的内容替换成replacement
flag标记:	rewrite支持的flag标记

rewrite参数的标签位置: server, location, if

flag标记说明:
last		#本条规则匹配完成后, 继续向下匹配新的location URI规则
break		#本条规则匹配完成即终止, 不再匹配后面的任何规则
redirect	#返回302临时重定向, 浏览器地址栏会显示跳转后的URL地址
permanent 	#返回301永久重定向, 浏览器地址栏会显示跳转后的URL地址

示例

实际url为: http://192.168.137.137/index.html?pageNum=111
浏览器url栏显示为: http://192.168.137.137/111.html

server {
  listen       80;
  server_name  localhost;
	
  location / {
  		rewrite	^/([0-9]+).html$	/index.html?pageNum=$1	break;
		proxy_pass http://192.168.137.137:8080;
  }

  # 所有静态请求都由nginx处理,存放目录为nginx中的html
  location ~*(css|js|css) {
      root   html;
      index  index.html;
  }
  
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
      root   e:wwwroot;
  }
} 

负载均衡示例

server {
  listen       80;
  server_name  localhost;
  
  upstream test {
  	server 192.168.137.139:80;
	server 192.168.137.133:80;
  }
  
  location / {
  		rewrite	^/([0-9]+).html$	/index.html?pageNum=$1	break;
		proxy_pass http://test;
  }

  # 所有静态请求都由nginx处理,存放目录为nginx中的html
  location ~*(css|js|css) {
       root   html;
      index  index.html;
  }
  
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
      root   e:wwwroot;
  }
} 

防盗链

说明

当浏览器访问静态资源时, 会二次向服务器发送请求, 这时请求头会带上referer
如果服务器设置了防盗链配置, Referer中域名与服务器防盗链设置的域名不同时, 无法访问

在这里插入图片描述

配置

valid_referers none | blocked | server_names | strings ...;
  • none: 检测Referer头域不存在的情况
  • blocked: 检测Referer头域的值被防火墙或者代理服务器删除或伪装的情况. 这种情况该头域的值不以"http://"或"https://"开头.
  • server_names: 设置一个或多个URL, 检测Referer头域的值是否是这些URL中的某一个

示例

server {
  listen       80;
  server_name  localhost;
  
  upstream test {
  	server 192.168.137.139:80;
	server 192.168.137.133:80;
  }
  
  location / {
  		rewrite	^/([0-9]+).html$	/index.html?pageNum=$1	break;
		proxy_pass http://test;
  }

  # 所有静态请求都由nginx处理,存放目录为nginx中的html
  location ~*(css|js|css) {
  	  # 防盗链设置
  	  valid_referers none 域名;
  	  # 检测是否包含上述域名, 不包含上述域名, 返回403
  	  if($invalid_referer){
		return 403;
	  }
	  
      root   html;
      index  index.html;
  }
  
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
      root   e:wwwroot;
  }
} 

高可用

将nginx所在服务器安装keepalived, 为服务器创建vip(虚拟ip), 当主服务dwon掉后, 虚拟ip就会移动到备用服务器, 这样可以保证同一个ip可以在不同服务器之间切换

在这里插入图片描述

安装Keepalived(此处为yum安装)

yum install -y keepalived

# 如果遇以下报错 安装openssl-devel依赖
configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files. !!!

# 安装openssl-devel依赖
yum install -y openssl-devel

配置

使用yum安装后, 配置文件所在路径为/etc/keepalived/keepalived.conf

完整的配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.200.200 1358

    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

主服务器最小配置文件

! Configuration File for keepalived

global_defs {
   # 配置id
   router_id lb137
}

# keepalived内网通信协议
vrrp_instance test {
    # 配置主机(备用机)
    state MASTER
    # 配置所在网卡名称
    interface ens33
    
    virtual_router_id 51
    # 优先级, 主备竞选时, 哪个高哪个为主
    priority 100
    # 间隔检测时间
    advert_int 1
    # 设置分组 
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip地址, 可配置多个
    virtual_ipaddress {
        192.168.137,200
      # 192.168.137.201
    }
}

备服务器最小配置文件

! Configuration File for keepalived

global_defs {
   # 配置id
   router_id lb139
}

# keepalived内网通信协议
vrrp_instance test {
    # 配置主机(备用机)
	    state BACKUP
    # 配置所在网卡名称
    interface ens33
    
    virtual_router_id 51
    # 优先级, 主备竞选时, 哪个高哪个为主
    priority 50
    # 间隔检测时间
    advert_int 1
    # 设置分组 
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip地址, 可配置多个
    virtual_ipaddress {
        192.168.137.200
      # 192.168.137.201
    }
}

!!!需要注意

  • vrrp_instance
  • virtual_router_id
  • authentication
    • auth_type
    • auth_pass

对应的内容需一致, 方能组成一组

启动、停止、重启、查看状态命令

systemctl start keepalived		# 启动
systemctl stop keepalived		# 停止
systemctl restart keepalived	# 重启
systemctl status keepalived		# 查看状态
systemctl reload keepalived		# 刷新配置

使用脚本检测nginx是否down, 同时让keepalived关闭

后续补充

Https证书配置

对称加密

在这里插入图片描述

openssl

SSL协议库、应用程序以及密码算法库

证书申请

参考视频

证书安装

nginx.conf配置文件

server {
	listen 443 ssl;
	server_name 域名/主机名;

	ssl_certificate	上传到服务器中的.crt/.pem文件路径;
	# ssl_certificate	/root/xxx/xxx.pem;  	文件绝对路径
	# ssl_certificate	 xxx.pem; 				文件相对路径 相对于 /usr/local/nginx/conf/
	ssl_certificate_key 上传到服务器中的.key文件路径;
	# ssl_certificate_key /root/xxx/xxx.key;	文件绝对路径
	# ssl_certificate_key  xxx.key				文件相对路径 相对于 /usr/local/nginx/conf/
	
}

http协议跳转https

return 301 https://$server_name$request_uri;
在配置文件中位置

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;
	server {
		listen 443 ssl;
		server_name 域名/主机名;
	
		ssl_certificate	上传到服务器中的.crt/.pem文件路径;
		ssl_certificate_key 上传到服务器中的.key文件路径;
	}
    server {
        listen       80;
        server_name  localhost;

        location / {
           return 301 https://$server_name$request_uri;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/954495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

西门子V20变频器外部端子功能说明

西门子V20变频器外部端子功能说明 如下图所示,为V20变频器的实物图, 如下图,为西门子V20变频器的外部端子编号和对应功能的基本说明: 具体的端子功能说明可参考以下内容: 更多关于V20变频器的信息可以参考以下链接中的内容:

测试-控制流测试

参考&#xff1a;ysu老师课件&#xff08;测试老师和软件工程老师的结合了一下&#xff09; 本文章总结了控制流测试的知识点和习题练习&#xff0c;没有总结如何画控制流图&#xff0c;很简单&#xff0c;跟着思路走就行&#xff0c;但是要注意一定要画合并结点。 目录 路径…

vue引入本地js文件时报错net::ERR_ABORTED 500 (Internal Server Error)

完整报错内容&#xff1a; GET http://192.168.0.000:8080/src/assets/js/websockets.js net::ERR_ABORTED 500 (Internal Server Error) 报错原因&#xff1a; js文件此时放在静态资源文件assets下 解决办法 应该放在public目录下 关联文章

15. 查看开源项目

15.1 parser.add_argument ① 像运行Tensorboar一样&#xff0c;在Terminal终端&#xff0c;可以命令运行.py文件。 ② 如下图所示&#xff0c;Terminal终端运行.py文件时&#xff0c;--变量 后面的值是给变量进行赋值&#xff0c;赋值后再在.py文件中运行。例如 ./datasets/…

msvcp140.dll重新安装的五解决方法及步骤分享(亲测可修复)

在使用电脑的过程中&#xff0c;大概率都会遇到这样的问题&#xff0c;由于找不到msvcp140.dll&#xff0c;无法继续执行代码“&#xff0c;又或者丢失msvcp100.dll&#xff0c;msvcp120.dll等等 我将和大家分享一个关于msvcp140.dll重新安装的解决方法及步骤。这对于经常遇到系…

spring安全代码学习

源代码地址 登录的时候调用整个代码的过程为&#xff1a; 1.在注入的时候&#xff0c;先运行两个Bean注入PasswordEncoder和AuthenticationManagerBean&#xff0c;然后运行configure函数 Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {…

Ceph基础知识和基础架构认识

1 Ceph基础介绍 Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统&#xff0c;根据场景划分可以将Ceph分为三大块&#xff0c;分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里&#xff0c;比较常用到的是Ceph的块设备存储&#xff0c;比如在OpenStack项目…

鲁棒优化入门(6)—Matlab+Yalmip两阶段鲁棒优化通用编程指南(上)

0.引言 上一篇博客介绍了使用Yalmip工具箱求解单阶段鲁棒优化的方法。这篇文章将和大家一起继续研究如何使用Yalmip工具箱求解两阶段鲁棒优化(默认看到这篇博客时已经有一定的基础了&#xff0c;如果没有可以看看我专栏里的其他文章)。关于两阶段鲁棒优化与列与约束生成算法的原…

恒运资本:意外!房地产板块风云突变

今天上午&#xff0c;A股震动调整&#xff0c;半导体工业链走强&#xff0c;光刻胶、国家大基金持股、先进封装等板块涨幅居前。 房地产板块开盘小幅冲高后忽然大跳水&#xff0c;之后继续跌落&#xff0c;到上午收盘&#xff0c;板块内逾30只个股跌超5%。珠江股份、首开股份、…

2023年信息安全管理与评估(赛项)评分标准第三阶段夺旗挑战CTF(网络安全渗透)

全国职业院校技能大赛 高职组 信息安全管理与评估 &#xff08;赛项&#xff09; 评分标准 第三阶段 夺旗挑战CTF&#xff08;网络安全渗透&#xff09; 竞赛项目赛题 本文件为信息安全管理与评估项目竞赛-第三阶段赛题&#xff0c;内容包括&#xff1a;夺旗挑战CTF&#xff08…

京东通过RPA+智能问答,实现微信端智能客服

一 背景 由于业务发展迅速&#xff0c;服务的商家越来越多&#xff0c;目前京东的售后团队都是通过企业微信群和客户进行沟通&#xff0c;平时客户的相关问题也是在企业微信中来讨论解决&#xff1b; 但是售后团队资源有限&#xff0c;而且有的问题客户会重复问&#xff0c;周…

ATA-2022B高压放大器的电子实验案例(案例合集)

ATA-2022B是一款可放大交直流信号的双通道高压放大器。最大输出200Vp-p电压&#xff0c;输出电压范围可根据输出轨调节&#xff1b;直流偏置电压三档可调&#xff0c;连续变化最大可输出160V&#xff0c;可以实现输出非对称信号需求&#xff0c;驱动高压型负载。凭借其优异的指…

项目-IM

zk 启动类实现CommandLineRunner接口&#xff0c;重写run()方法 单聊 群聊 离线消息

uniapp 微信小程序仿抖音评论区功能,支持展开收起

最近需要写一个评论区功能&#xff0c;所以打算仿照抖音做一个评论功能&#xff0c;支持展开和收起&#xff0c; 首先我们需要对功能做一个拆解&#xff0c;评论区功能&#xff0c;两个模块&#xff0c;一个是发表评论模块&#xff0c;一个是评论展示区。接下来对这两个模块进行…

论文于祥读及复现——《Multi-level Map Construction for Dynamic Scenes》

论文祥读之——动态场景的多层次地图构建 0. 出发点&#xff08;暨摘要&#xff09;1. 引言2. 相关工作3.主要内容概括3.1 几何地图的构建3.1.1 密集点云地图和八叉图的构建3.1.2 平面地图的构建 3.2 对象地图的构建3.2.1 对象参数化和数据关联3.2.2 对象的更新与优化 4. 实验4…

数组——双指针法

双指针法 用两个同向或者反向的指针来代替两重循环。 提醒&#xff1a;不要老想着用同向双指针&#xff0c;有时候&#xff0c;相向双指针更容易解决问题。 LeetCode 27 class Solution {public int removeElement(int[] nums, int val) {int j0;for(int i0;i<nums.leng…

Hibernate(Spring-Data)3种实体继承创建表方式指南

文章目录 引言1. Hibernate 实体继承概述1.1 继承的概念和作用1.2 Hibernate 中的实体继承方式1.3 基础注解 2. 单表继承策略2.1 概述2.2 表结构设计2.3 实体类映射配置 3. 具体类继承策略3.1 概述3.2 表结构设计3.3 实体类映射配置 4. 映射超类策略(每个类一张表)4.1 概述4.2 …

vue3动态路由警告问题

{ path: "/:pathMatch(.*)*", // 必备 component: () > import("/views/error/404.vue"), }, 路由里添加

通达信接口查询持仓数据步骤(一)

股市里用到的查询通达信接口数据通常需要经历以下步骤&#xff1a; 1. 连接接口&#xff1a;首先需要使用相应的接口来连接到交易所或证券公司的服务器。这通常需要使用开发包或API提供的相关函数或方法进行连接。 2. 登录认证&#xff1a;在连接成功后&#xff0c;需要使用登录…

第八周第四天学习总结

测试linux基础并复习基础命令