nginx 入门 (b站IT楠老师学习笔记)

news2024/9/22 19:31:49

文章目录

  • Nginx 入门 (b站IT楠老师学习笔记)
    • 一 基础了解
      • 1、下载nginx安装包
      • 2. nginx 可以提供的服务
      • 3. nginx 的优点
      • 4. 应用场景
    • 二 实战
      • 2.1 基础检查以及配置文件结构了解
      • 2.2 main全局配置
      • 2.3 events模块
      • 2.4 http服务器配置
      • 2.5虚拟主机配置详解
          • 2.5.1 http服务上支持【若干虚拟主机】。**每个虚拟主机对应一个server配置项**,配置项里面包含该虚拟主机相关的配置
          • 2.5.2 location 常见的配置项:
          • 2.5.3、文件路径的定义
          • 2.5.4 解决前端的路由问题
          • 2.5.5 对图片开启gzip压缩
      • 2.6 反向代理解决跨域(同一ip 不同端口的跨域)
          • 2.6.1、配置nginx反向代理
      • 2.7 为后端工程做负载均衡
          • 2.7.1 upstream模块解读
          • 2.7.2 ngixn负载均衡的五种算法
      • 2.8 其他的跨域问题(不同IP段的跨域)
      • 2.9 nginx监控
      • 2.8其它nginx配置
        • 2.8.1 访问控制 allow/deny
        • 2.8.2 2、列出目录 autoindex

Nginx 入门 (b站IT楠老师学习笔记)

一 基础了解

1、下载nginx安装包

进入nginx官网(http://nginx.org/en/):
在这里插入图片描述

2. nginx 可以提供的服务

  1. web 服务
  2. 负载均衡 (反向代理)
  3. web cache(web 缓存)

3. nginx 的优点

  1. 比其他服务器响应更快。
  2. 高扩展,nginx的设计极具扩展性,他是由多个功能不同且耦合性极低的模块组成。
  3. 单机支持并发极高,理论上支持10万的并发连接,nginx支持的并发连接和内存相关,超过10万也是可以的。
  4. 低内存消耗,10000个非活跃的http keep-alive链接在nginx中仅仅消耗2.5M的内存。
  5. 支持热部署,如不用停止服务就能重新加载配置文件。(nginx - s reload)
  6. 极具自由的BSD许可协议。我们不仅可以直接阅读nginx的源代码、还能用来修改升级。(可拓展性)

4. 应用场景

  1. 静态服务器。用来存放我们的静态资源,如图片、静态页面、js、css等。
  2. 反向代理,负载均衡。日pv2000W以下,都可以直接用nginx做代理。
  3. 缓存服务。

二 实战

2.1 基础检查以及配置文件结构了解

#找到nginx命令所在目录 
which nginx

#找到nginx
whereis nginx

# nginx 基础	命令 
# 在nginx命令所在目录
./nginx # 这种启动在 我们ps -ef|gret nginx 下无法确认安装路径
./nginx -s stop #强制停止
./nginx -s quit #现有进程结束后停止 推荐使用
./nginx -s reload

# 启动补充 后面路径为你的配置文件路径 这种启动方式可以在利用在查看线程时确认路劲
nginx -c /usr/local/nginx/conf/nginx.conf 

# 查看nginx 进程
ps -ef|gret nginx

#杀死nginx 主线程
kill -quit xxxx
# 检查配置文件是否正确
shell> /data/nginx/sbin/nginx -t 
nginx: the configuration file /data/nginx-1.10.3/conf/nginx.conf syntax is ok
nginx: configuration file /data/nginx-1.10.3/conf/nginx.conf test is successful

# 检查nginx 是否启动,因为nginx默认监听80端口
shell> curl -I http://localhost      # -I代表只显示头信息
HTTP/1.1 200 OK
main{ #(全局设置)
    http{ #服务器配置
        upstream{} #(负载均衡服务器设置)
        server{ #(主机设置:主要用于指定主机和端口)
            location{} #(URL匹配的设置)
        }
    }
}

2.2 main全局配置

user ydlclass;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
error_log  /data/nginx/logs/error.log  crit;
pid        /data/nginx/logs/nginx.pid;
worker_rlimit_nofile 65535;

  1. user nginx;: 指定nginx进程使用什么用户启动
  2. worker_processes 4; : 指定启动多少进程来处理请求,一般情况下设置成CPU的核数,如果开启了ssl和gzip应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。使用grep ^processor /proc/cpuinfo | wc -l查看CPU核数。
  3. worker_cpu_affinity 0001 0010 0100 1000;: 在高并发情况下,通过设置将CPU和具体的进程绑定来降低由于多核CPU切换造成的寄存器等现场重建带来的性能损耗。如 worker_cpu_affinity 0001 0010 0100 1000; (四核)。
  4. error_log logs/error.log;: error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
  5. pid logs/nginx.pid;: 指定进程pid文件的位置。

2.3 events模块

events 模块主要是nginx 和用户交互网络连接优化的配置内容,我们主要看一下两个配置:

events{
  use epoll;
  worker_connections  65536;
}

  1. use epoll;是使用事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。在操作系统不支持这些高效模型时才使用select。
  2. worker_connections 65536;每一个worker进程能并发处理(发起)的最大连接数。

2.4 http服务器配置

http{
  include       mime.types;
  default_type  application/octet-stream;
  #charset  gb2312;
  sendfile        on;
  keepalive_timeout  60s;
}

  1. include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。该文件也在conf目录中。(导入配置)
  2. default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式。(因为我们导入了mime.types,如果在mime.types里面没有的传输类型,我们默认用 二进制流
  3. charset gb2312; 指定客户端编码格式。
  4. sendfile实际上是 Linux2.0+以后的推出的一个系统调用,web服务器可以通过调整自身的配置来决定是否利用 sendfile这个系统调用。sendfile是个比 read 和 write 更高性能的系统接口。 当 Nginx 是一个静态文件服务器的时候,开启 SENDFILE 配置项能大大提高 Nginx 的性能。 但是当 Nginx 是作为一个反向代理来使用的时候,SENDFILE 则没什么用。
  5. Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接

2.5虚拟主机配置详解

2.5.1 http服务上支持【若干虚拟主机】。每个虚拟主机对应一个server配置项,配置项里面包含该虚拟主机相关的配置
server{
    listen 80 default;
    server_name www.ydlclass.com;
    index index.html index.htm index.php;
    root /data/www;

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${
        expires      30d;
    }

    location ~ .*\.(js|css)?${
        expires      1h;
    }
}
  1. listen 80; 监听端口,默认80,小于1024的要以root启动。可以为listen :80、listen 127.0.0.1:80等形式。
  2. server_name www.ydlclass.com 用于设置虚拟主机服务名称,如:127.0.0.1 、 localhost 、域名(有才行)。
  3. root /data/www 定义服务器的默认网站根目录位置。可以是linux的绝对路径(/xxx/xx),也可以是nginx安装目录的相对路径(html)。
  4. index index.jsp index.html index.htm :定义路径下默认访问的文件名,一般跟着root放。
  5. expires 捕获到的请求去走浏览器缓存,这里设置缓存失效时间
2.5.2 location 常见的配置项:
location通常用来匹配uri,其基本语法如下:
location [=|~|~*|^~] /uri/ {}
各个参数说明
(1)=表示匹配uri时必须做到完全匹配,如
location = /index {}
(2)~表示匹配URI时是字母大小写敏感的,可以使用正则表达式。

(3)~*表示匹配URI时是忽略字母大小敏感的,可以使用正则表达式。

(4)^~表示匹配uri时只需满足前缀匹配即可

# 所有 /./img/开头的uri会全部匹配
location ^~ /./img/ {}

#uri参数中是可以使用正则表达式的,如匹配以 .gif .jpg和.jpeg结尾的uri
location ~* \.(gif|jpg|jpeg)$ {}

结果总结: 匹配的优先顺序,= > ^~(匹配固定字符串,忽略正则)> ~ > / ,工作中尽量将‘=’放在前面*

2.5.3、文件路径的定义
location ^~ /backend {
	root /data/www/backend
}

如果url为 /backend/index/test.html则会返回/data/www/backend/backend/index/test.html这个文件。

location ^~ /backend {
	alias /data/www/backend
}

如果url为 /backend/index/test.html则会返回/data/www/backend/index/test.html文件。

alias会将location后的url部分丢弃掉,而root不会

根据http返回码重定向页面
error_page 404 /404.html
error_page 502 503 504 /50x.html
try_files path1 path2 ... uri
try_files后边会跟若干路径,nginx会尝试按照顺序访问每一个path,如果可以有效的读取,就直接访问当下path资源,否则继续向下访问,如果都读取不到就重定向到uri参数上

location ^~ /backend {
	alias /data/www/backend;
	try_files /a/b.html $uri $uri/index.html $uri.html @other;
}
location @other {
    proxy_pass http://backend
}
127.0.0.1/backend/cd
先找: /data/www/backend/cd/a/b.thml 再 /data/www/backend/cd 
再 /data/www/backend/cd/index.thml
再 /data/www/backend/cd.thml 最后走到@other
2.5.4 解决前端的路由问题

因为我们的前端项目一般都是单一页面(index.thml)项目,我们在前端直接点击路由的按钮可以访问,因为这种情况并未再次向nginx发送请求,仅仅是前端的路由切换:
在这里插入图片描述
但是,如果直接访问/about就GG了,这个url直接访问nginx时,nginx会认为你要查找about这个资源,当然是404了:
在这里插入图片描述

location / {
    root /data/www/ui;
    try_files /index.html;
}

在这里插入图片描述
这里本质是先从index.html 再调整路由

但是这个有问题的,比如下边的请求,也会强制使用index.html,我明明需要js,你却给我一个HTML:

http://192.168.111.201/js/app.aa11d15b.js

所以配置要改成下边的内容,$uri是一个变量,他就是具体的url,对一/js/app.aa11d15b.js这个请求,首先会访问/data/www/ui/js/app.aa11d15b.js这个资源,当然存在,就直接返回了,而其他的路由资源会使用index.html:

location / {
    root /data/www/ui;
    try_files $uri $uri/ $uri/index.html $uri.html /index.html;
}

2.5.5 对图片开启gzip压缩

在http模块中添加如下内容:

gzip on;
gzip_min_length 1k;
gzip_buffers    4 16k;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_types image/png;
gzip_vary on;

解释如下:

gzip on;使用"gzip on;"参数来启用压缩,默认是关闭的。

gzip_min_length 1k;gzip压缩的最小文件,小于设置值的文件将不会压缩#指定Nginx服务需要向服务器申请的缓存空间的个数*大小,默认32 4k|16 8k;

gzip_buffers 4 16k;设置压缩缓冲区大小,此处设置为4个16K内存作为压缩结果流缓存

gzip_http_version 1.1;启用压缩功能时,协议的最小版本,默认HTTP/1.1

gzip_comp_level 5;压缩比例由低到高从1到9,默认为1。但需要注意的是压缩比设置的越高就会越消耗CPU的资源,因此在生产环境中我们会设置该参数的值在3~5之间,最好不要超过5,因为随着压缩比的增大的确会降低传输的带宽成本但发送数据前会占用更多的CPU时间分片。

gzip_types image/png;指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错。

gzip_vary on;该指令用于设置在使用Gzip功能时是否发送带有“Vary: Accept-Encoding”头域的响应头部。该头域的主要功能是告诉接收方发送的数据经过了压缩处理。开启后的效果是在响应头部添加了Accept-Encoding: gzip,这对于本身不支持Gzip压缩的客户端浏览器是有用的。

设置图片压缩后,响应多了如下的首部信息:
在这里插入图片描述

2.6 反向代理解决跨域(同一ip 不同端口的跨域)

2.6.1、配置nginx反向代理

现在我们想的是将前端发送的以api打头的url全部代理到,后端8080端口:

前端访问的接口:http://192.168.111.200:80/api/host

后端的接口:http://192.168.111.200:8080/host

在实现代理的过程中,我们需要将/api这个前缀删除掉,有以下两种方法,一种是重写url,如下:

location ^~ /api/ {
    rewrite ^/api(.*)$ $1 break;
    proxy_pass http://127.0.0.1:8080;
}

小知识:location中的rewirte:

rewrite break:url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变

rewrite last:url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变

rewrite redirect:返回302临时重定向,地址栏显示重定向后的url。


更简单的做法是,在代理地址的后边加/,这样做也会去掉前缀,但不如以上方式灵活

location ^~ /api/ {
    proxy_pass http://127.0.0.1:8080/;
}

案例1:
location /api/a/b/ {
    proxy_pass http://127.0.0.1:8080/;
}
http:127.0.0.1/api/a/b/c 
代理后:http:127.0.0.1:8080/c 

案例2:
location /api/a/b {
    proxy_pass http://127.0.0.1:8080/;
}
http:127.0.0.1/api/a/b/c 
代理后:http:127.0.0.1:8080/api//c 

案例3:
location /api/a/b {
    proxy_pass http://127.0.0.1:8080/a;
}
http:127.0.0.1/api/a/b/c 
代理后:http:127.0.0.1:8080/a/c 

总结 
proxy_pass 带/ 或者/XX : 代理路径 = proxy_pass+(真实路径-捕获路径)  
proxy_pass ip+port : 代理路径 = proxy_pass+真实路径 

2.7 为后端工程做负载均衡

2.7.1 upstream模块解读

nginx 的负载均衡功能依赖于 ngx_http_upstream_module模块。upstream 模块应该放于http{}标签内。

模块写法如下:

upstream backend {
    ip_hash; 
    server backend1.example.com;
    server backend2.example.com:8080;
    server 127.0.0.1:8080;
    server backup2.example.com:8080;
}

然后在location处使用如下写法:

location / {
    proxy_pass http://backend;
}

以上写法的意思就是,将来同一个url访问我们的服务时,服务可以由backend中的服务器按照某种特定规则轮流提供
2.7.2 ngixn负载均衡的五种算法

(1)round robin 轮询 (默认) 按时间顺序依次将请求分配到各个后台服务器中,挂掉的服务器自动从列表中剔除

upstream bakend {  
   server 192.168.0.1 down;    #down 表示挂掉的服务器,剔除不进负载
   server 192.168.0.2;  
}

(2)weight 轮询权重 weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下,或在主从的情况下设置不同的权值,达到合理有效的地利用主机资源

upstream bakend {  
    server 192.168.0.1 weight=20;  
    server 192.168.0.2 weight=10;  
}

(3)ip_hash:每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题
缺点:当某台服务器挂掉后,一些服务器的请求将一直没办法到后端

upstream bakend {  
    ip_hash;  
    server 192.168.0.1:88;  
    server 192.168.0.2:80;  
} 

(4)url_hash:按访问的URL的哈希结果来分配请求,使每个URL定向到同一台后端服务器,可以进一步提高后端服务器缓存的效率。Nginx本身不支持url_hash,需要安装Nginx的hash软件包。

upstream backend {  
    server 192.168.0.1:88;     //使用hash语句时,不能在使用weight等其他参数
    server 192.168.0.2:80;  
    hash $request_uri;  
    hash_method crc32;    //使用hash算法
}

(5)fair算法:可以根据页面大小和加载时间长短智能地进行负载均衡,根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,要安装upstream_fair模块才能使用。

upstream backend {  
    server 192.168.0.1:88;  
    server 192.168.0.2:80;  
    fair;  
}

2.8 其他的跨域问题(不同IP段的跨域)

如果现在本机(127.0.0.1)的前端项目(也就是其他服务器的前端项目)也想要访问虚拟机中ngixn代理的api接口。这是一个典型的不同的项目之间进行访问的问题,这必然存在跨域问题

根据我们学习过的知识要解决跨域问题。其实,只需要在客户端发送【预检请求】时指定对应的响应头即可,nginx可以很方便的给响应增加一些首部信息,方法如下,在:

location ^~ /api/ {
    add_header 'Access-Control-Allow-Origin' '*';
	add_header 'Access-Control-Allow_Credentials' 'true';
	add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
	add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';
    proxy_pass http://ydlclass/;
}


在这里插入图片描述

2.9 nginx监控

#设定查看Nginx状态的地址   
location = /status {  
  stub_status on;   	#表示开启stubStatus的工作状态统计功能。
}

curl http://127.0.0.1/status

在这里插入图片描述

2.8其它nginx配置

2.8.1 访问控制 allow/deny

Nginx 的访问控制模块默认就会安装,而且写法也非常简单,可以分别有多个allow,deny,允许或禁止某个ip或ip段访问,依次满足任何一个规则就停止往下匹配

location /status {
  stub_status on;
  access_log off;
  allow 192.168.10.100;
  allow 172.29.73.0/24;
  deny all;
}
/status 只有 ip 192.168.10.100 以及ip段位为 172.29.73.0/24 可以访问

2.8.2 2、列出目录 autoindex

Nginx默认是不允许列出整个目录的。如需此功能,打开nginx.conf文件,在location,server 或 http段中加入如下参数:这个功能我们可以做一个资源下载站。

location ^~ /file {
    root   /data/www;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    charset utf-8,gbk;
}

autoindex on;运行列出目录内容。另外两个参数最好也加上去。
autoindex_exact_size off; 默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB。
autoindex_localtime on; 默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间。

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

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

相关文章

el-pagination分页查询封装

需求&#xff1a;因为需要用到表单查询的地方太多了&#xff0c;所以为了避免每个页面都写分页组件&#xff0c;直接封装好调用就完事了&#xff0c;简简单单 1.创建Pigination.vue公用组件 <template><div :class"{hidden:hidden}" class"paginatio…

AD中修改一个元器件的所有焊盘大小

1.首先&#xff0c;选中其中一个焊盘。 2.查找相似对象 3.修改component为same 4.修改X size和Y size为same 5.确定 6.修改Pad Stack中的x/y 注&#xff1a;component可以不用改为same&#xff0c;用any就是查找和这个焊盘大小类似的对象。

力扣1768.交替合并字符串(java模拟法)

题目描述&#xff1a; 给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 问题分析&#xff1a; 我们可以直…

servlet 监听器

做法: 在web.xml中: 或

矩形中的正方形:探究力扣最大正方形问题的奥秘

本篇博客会讲解力扣“1725. 可以形成最大正方形的矩形数目”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a;对于每一个矩形&#xff0c;切分出来的最大正方形的边长是矩形的长和宽的较小值。我们需要维护最大的正方形边长&#xff0c;并统计数目。 我们可以写…

Verilog基础之十、计数器实现

目录 一、前言 二、工程设计 2.1 设计代码 2.2 综合结果 ​2.3 仿真结果 一、前言 计数器是较为基础的逻辑&#xff0c;很多其他逻辑可依靠计数器实现&#xff0c;如控制器&#xff0c;分频。原理为通过统计时钟脉冲的个数来输出计数值。 二、工程设计 2.1 设计代码 工…

实验 09 线性回归与波士顿房价预测

文章目录 实验 09 线性回归与波士顿房价预测一、实验目的二、实验设备三、实验内容3.1 了解数据3.2 分析数据3.3 建立模型&#xff08;一&#xff09;使用一个变量进行预测&#xff08;二&#xff09;使用多元线性回归分析进行预测 实验 09 线性回归与波士顿房价预测 一、实验…

Dubbo【Dubbo实战(整合Mybaits-plus配置、接口、集成Thymeleaf) 】(五)-全面详解(学习总结---从入门到深化)

目录 ​编辑 Dubbo实战_整合Mybaits-plus配置 Dubbo实战_创建添加用户接口 Dubbo实战_查询用户业务接口 Dubbo实战_更新用户业务接口 Dubbo实战_删除用户业务接口 Dubbo实战_集成Thymeleaf Dubbo实战_用户添加业务消费者实现 Dubbo实战_用户查询业务消费者实现 Dubbo实战_…

R带参数运行

rm(listls()) suppressPackageStartupMessages({library(getopt) })# getopt(),是getopt包的函数&#xff0c;需要先按照getopt包 # # getopt(spec NULL, opt commandArgs(TRUE),command get_Rscript_filename(), usage FALSE,debug FALSE) # # spec&#xff1a;一个4或…

linux suse12 安装mysql

1.下载mysql https://dev.mysql.com/downloads/mysql/ 2.选中mysql版本 对选中的版本进行下载 也可以在linux服务器上直接下载&#xff1a;wget -c https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz 3.把下载好的文件放到/usr/local…

mac上的vscode设置用滚轮来调节编辑页面大小

mac上的vscode设置用滚轮来调节编辑页面大小 问题背景 今天在mac上安装了vscode&#xff0c;刚想编写代码&#xff0c;但是突然发现无法用ctrl鼠标的滚轮来进行控制 代码编辑区域字体的大小。 解决方法 经过查找资料&#xff0c;发现在设置的配置文件中&#xff0c;有一个配…

前后端分离模式开发的BS电子病历编辑器源码(Java)

电子病历系统&#xff0c;是医学专用系统。医院通过电子病历以电子化方式记录患者就诊的信息&#xff0c;包括&#xff1a;首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等&#xff0c;其中既有结构化信息&#xff0c;也有非结构化的自由文本&#xff0c;还有图形…

HOT19-螺旋矩阵

leetcode原题链接&#xff1a;螺旋矩阵 题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示例…

通过USB和wifi连接真机编写第一个脚本

目录 一、连接手机 1、通过usb数据线连接手机 2、无线连接手机 二、编写第一个脚本 一、连接手机 1、通过usb数据线连接手机 数据线连接手机并允许调试 cmd命令行执行&#xff1a; adb devices 如果没有显示device信息&#xff0c;请检查&#xff1a; 手机是否开启usb调…

element的时间控件默认值为当前时间

vue代码 <el-form-item label"验收时间" prop"checkAcceptTime"><el-date-picker clearablev-model"form.checkAcceptTime"type"datetime"value-format"yyyy-MM-dd HH:mm:ss"placeholder"请选择验收时间"…

微信发布新规:这功能,要收费了

近日&#xff0c;微信小程序发布《关于手机号快速验证组件升级及收费的通知》&#xff0c;通知中指出&#xff1a;手机号验证能力在原有基础上&#xff0c;新增手机号实时验证能力。 同时&#xff0c;为了平衡技术服务与运营成本&#xff0c;平台将于2023年8月26日起对手机号验…

SQL Server,想要查询某表数据,但表名存放在别的表内,SQL语句怎么写?

动态SQL查询案例 需求描述&#xff1a; 原始的表名、表的属性描述信息在summary表中&#xff0c;每个表有类似的字段&#xff1a;id、price、size&#xff0c;通过SQL能查询到所有表的如下记录&#xff1a; 表名、表属性名、最低价格、最低价格对应ID、最大尺寸、最大尺寸对应…

Linux学习之yum安装软件

要是使用rpm安装软件&#xff0c;就需要自己解决依赖包的安装&#xff0c;使用yum进行安装&#xff0c;就可以自动安装依赖包。可以先到阿里云CentOS 镜像网站学习一下如何更改yum源。我这里演示如何更改yum源。 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS…

人像美白的python实现

人像美白在现在的美颜功能里面几乎属于必备的&#xff0c;各家的方案都不太一致&#xff0c;本文主要介绍一种基于肤色分割的人像美白方案。 首先得将人像进行皮肤分割&#xff0c;具体最好是使用AI模型&#xff0c;这里就不展开了&#xff0c;本人侧重点是美白算法&#xff0c…

数据库实验-图书销售管理系统数据库SQL应用编程

一、实验一&#xff1a;图书销售管理系统数据库SQL应用编程 二、实验时间&#xff1a;2023.4.21 三、实验目的 结合图书销售管理系统数据库开发项目案例&#xff0c;开展数据库SQL应用编程实践&#xff0c;培养数据库SQL操作访问、存储过程与触发器处理的数据库编程能力…