nginx基础3——配置文件详解(实用功能篇)

news2024/11/25 18:27:52

文章目录

  • 一、平滑升级
  • 二、修饰符
    • 2.1 无修饰符效果
    • 2.2 精准匹配(=)
    • 2.3 区分大小写匹配(~)
    • 2.4 不区分大小写匹配(~*)
    • 2.5 匹配优先级
  • 三、访问控制
  • 四、用户认证
  • 五、配置https
  • 六、开启状态界面
  • 七、rewrite重写url
    • 7.1 uri——>uri
    • 7.2 uri——>其他网址
    • 7.3 uri——>uri——>uri
  • 八、if判断
    • 8.1 浏览器分离
    • 8.2 防盗链
  • 九、反向代理与负载均衡
    • 9.1 基本了解
    • 9.2 示例

一、平滑升级

  • 平滑升级就是在不影响业务运行的情况下,可以对nginx新增模块功能。虽然有这样一个功能,但在实际生产中最好是一次性把所有需要的模块编译进去。
  • 这里演示如何新增一个echo模块。

1.紧接上文,查看nginx当前已编译的模块。
在这里插入图片描述
2.下载新模块,echo模块下载地址。


3.解压nginx安装包,注意这里的安装包版本就是当前已安装的nginx版本的二进制包。

tar zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0

4.开始编译新模块。

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--add-module=/root/echo-nginx-module-master    //也就是在第一次编译的所有参数后买你添加此行,指定新增模块的解压目录。

//使用make编译,编译后绝不能再执行make install。
make

5.备份原程序。

cp /usr/local/nginx/sbin/nginx{,-bck}

在这里插入图片描述
6.停止服务,使用新程序文件启动Nginx,最后查看已经编译的模块。

//停止服务。
nginx -s stop

//拷贝新程序替换原程序
cp /root/nginx-1.24.0/objs/nginx /usr/local/nginx/sbin/

//启动服务。
nginx

在这里插入图片描述
7.测试echo模块效果。修改配置文件后重启服务,访问url
在这里插入图片描述

二、修饰符

修饰符功能
=精确匹配
~正则表达式模式匹配,区分大小写
~*正则表达式模式匹配,不区分大小写
^~前缀匹配,类似于无修饰符的行为,也是以指定模块开始,不同的是,如果模式匹配,那么就停止搜索其他模式了,不支持正则表达式
@定义命名location区段,这些区段客户端不能访问,只可以由内部产生的请求来访问,如try_files或error_page等

2.1 无修饰符效果

1.修改配置文件,重启服务。

http {
    server {
        listen  80;
        server_name  www.qingjun.com;
        location /qingjun {    //此时location没有添加修饰符,就光一个/qingjun
            echo 'hehe';
        }
    }
}  

2.此时能匹配qingjun并输出内容,如下几种情况。
在这里插入图片描述

2.2 精准匹配(=)

  • =,表示必须与指定的模式精确匹配。

1.修改配置文件,重启服务。

http {
    server {
        listen  80;
        server_name  www.qingjun.com;
        location =  /qingjun {    //在/qingjun前面添加修饰符 =
            echo 'hehe';
        }
    }
}

2.此时能匹配qingjun并输出内容,如以下几种情况。

在这里插入图片描述
3.以下几种情况不能匹配。

在这里插入图片描述

2.3 区分大小写匹配(~)

  • ~,表示指定的正则表达式要区分大小写

1.修改配置文件,重启服务。

http {
    server {
        listen  80;
        server_name  www.qingjun.com;
        location ~  /qingjun {
            echo 'hehe';
        }
    }
}

2.查看效果。

在这里插入图片描述

2.4 不区分大小写匹配(~*)

  • ~*,表示指定的正则表达式不区分大小写

1.修改配置文件,重启服务。

http {
    server {
        listen  80;
        server_name  www.qingjun.com;
        location ~*  /qingjun {
            echo 'hehe';
        }
    }
}

2.查看效果。

在这里插入图片描述

2.5 匹配优先级

优先级次序如下:

( location = 路径 ) --> ( location ^~ 路径 ) --> ( location ~ 正则 ) --> ( location ~* 正则 ) --> ( location 路径 )

1.当有=修饰符时,优先显示=修饰符下面的location内容。

在这里插入图片描述
2.正则表达式按照配置文件中定义的顺序匹配。

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

三、访问控制

  • 访问控制就是设置黑名单、白名单,允许哪些主机可以访问,哪些主机不能访问。
参数释义备注
allow设定允许哪台或哪些主机访问,多个参数间用空格隔开。可用于全局段、http段、server段、location段
deny设定禁止哪台或哪些主机访问,多个参数间用空格隔开。可用于全局段、http段、server段、location段

1.示例。

allow 192.168.1.1/32 172.16.0.0/16;
deny all;

2.设置IP白名单。

http {
    server {
        listen  80;
        server_name  www.qingjun.com;
        location ~  /qingjun {
            echo 'dsadjkalsdjlkaas';
            allow 192.168.161.132/32;    //只允许这台主机访问
            deny all;    //拒绝所有主机
        }
    }
}

在这里插入图片描述

3.设置IP黑名单。

http {
    deny 192.168.161.132/32;
    allow all;
    server {
        listen  80;
        server_name  www.qingjun.com;
        location ~  /qingjun {
            echo 'dsadjkalsdjlkaas';
        }
    }
}

在这里插入图片描述

四、用户认证

  • 让客户端访问时需要通过输入正确的账号密码后,才能访问到网页。
参数释义备注
auth_basic “欢迎信息”;添加描述信息。可用于全局段、http段、server段、location段
auth_basic_user_file “/path/to/user_auth_file”指定加密文件路径。可用于全局段、http段、server段、location段

1.生成加密文件,里面包含账户和密码。

yum -y install httpd-tools

//-m指定文件存放路径,一般就是如下这个地址,admin为自定义账户。
htpasswd -c -m /usr/local/nginx/.password admin

在这里插入图片描述
2.修改nginx配置文件,指定加密文件。

http {
    auth_basic "111";
    auth_basic_user_file '/usr/local/nginx/.password';
    server {
        listen  80;
        server_name  www.qingjun.com;
        location ~  /qingjun {
            echo 'dsadjkalsdjlkaas';
        }
    }
}

3.访问网页,查看效果。
在这里插入图片描述
在这里插入图片描述

五、配置https

1.自签CA证书。

//生成密钥。
mkdir /etc/pki/CA
cd /etc/pki/CA/
mkdir private
(umask 077;openssl genrsa -out private/cakey.pem 2048)
//提取公钥。
openssl rsa -in private/cakey.pem -pubout


//CA自签证书。
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365

//#读出cacert.pem证书内容
openssl x509 -text -in cacert.pem
mkdir certs newcerts crl
touch index.txt && echo 01 > serial

//客户端生成密钥。
cd /usr/local/nginx/
mkdir ssl
cd ssl/
(umask 077;openssl genrsa -out nginx.key 2048)


//客户端生成证书签署请求
openssl req -new -key nginx.key -days 365 -out nginx.csr

//客户端把证书签署请求文件发送给CA(这里不需要做这步骤,因为我们已经在当前目录了)
scp httpd.csr root@CA端IP:/root

//CA签署客户端提交上来的证书。
openssl ca -in ./nginx.csr -out nginx.crt -days 365

//删除过度文件。
rm -rf nginx.csr

在这里插入图片描述
2.修改nginx配置文件。

http {
    server {
        listen 443 ssl;       //修改端口号
        server_name  www.qingjun.com;   //域名要与证书里保持一致。
        ssl_certificate      ../ssl/nginx.crt;      //指定公钥
        ssl_certificate_key  ../ssl/nginx.key;     //指定私钥

        ssl_session_cache    shared:SSL:1m;    //取消注释
        ssl_session_timeout  5m;      //取消注释
        ssl_ciphers  HIGH:!aNULL:!MD5;     //取消注释
        ssl_prefer_server_ciphers  on;     //取消注释

        location ~  /qingjun {
            echo 'dsadjkalsdjlkaas';
        }
    }
}

3.重启服务,访问网页。

在这里插入图片描述

六、开启状态界面

  • 可以通过状态网页获取基本的流量信息。
  • 该参数由 --with-http_stub_status_module 模块提供,安装Nginx时需要加入该模块。
状态码表示的意义
Active connections 2当前所有处于打开状态的连接数
accepts总共处理了多少个连接
handled成功创建多少握手
requests总共处理了多少个请求
Readingnginx读取到客户端的Header信息数,表示正处于接收请求状态的连接数
Writingnginx返回给客户端的Header信息数,表示请求已经接收完成,
且正处于处理请求或发送响应的过程中的连接数
Waiting开启keep-alive的情况下,这个值等于active - (reading + writing),
意思就是Nginx已处理完正在等候下一次请求指令的驻留连接

1.修改配置文件。可以配合白名单来玩。

location /status {
  stub_status {on | off};
  allow 172.16.0.0/16;
  deny all;
}

2.重启服务,http://ip/status访问状态网页。
在这里插入图片描述

活动的连接数:1
服务接受的连接数:4
处理的个数:4
请求的个数:1
处于读的个数:0
处于写的个数:1
处于等待的个数:1

3.可以使用zabbix监控这个网页中的连接数。

[root@master conf]# curl -k https://192.168.161.129/status 
Active connections: 1 
server accepts handled requests
 6 6 2 
Reading: 0 Writing: 1 Waiting: 0 

//取第一行的数值即可。
curl -k https://192.168.161.129/status |awk 'NR==1{print $3}'
1

七、rewrite重写url

  • 把原来要访问的uri交给另外一个uri去寻找,是用来执行URL重定向。
  • 这个机制有利于去掉恶意访问的url,也有利于搜索引擎优化(SEO)
  • 语法:rewrite regex replacement flag;
  • 捕获子表达式,可以捕获放在()之间的任何文本,比如^(hello|sir)$ ,符串为“hi sir”捕获的结果$1=hi$2=sir
示例释义
rewrite ^/images/(.*.jpg)$ /imgs/$1 break表示访问images的uri时,交给imgs这个uri去寻找。
rewrite ^/img/(.*)$ http://www.idfsoft.com/index.html redirect表示访问img这个uri时,交给http://www.idfsoft.com/index.html这个url寻找。
flag作用
last基本上都用这个flag,表示当前的匹配结束,继续下一个匹配,最多匹配10个到20个
一旦此rewrite规则重写完成后,就不再被后面其它的rewrite规则进行处理
而是由UserAgent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程
break中止Rewrite,不再继续匹配
一旦此rewrite规则重写完成后,由UserAgent对新的URL重新发起请求,
且不再会被当前location内的任何rewrite规则所检查
redirect以临时重定向的HTTP状态302返回新的URL
permanent以永久重定向的HTTP状态301返回新的URL
标识符意义
^必须以^后的实体开头
$必须以$前的实体结尾
.匹配任意字符
[]匹配指定字符集内的任意字符
[^]匹配任何不包括在指定字符集内的任意字符串
l匹配 l之前或之后的实体
()分组,组成一组用于匹配的实体,通常会有 l来协助

7.1 uri——>uri

1.正常访问图片效果。创建图片目录,上传一张图片,web访问。

mkdir /usr/local/nginx/html/img
[root@master img]# ll
-rw-r--r-- 1 root root 1476047 Jul 18 23:20 1.jpg

//修改配置文件。
vim /usr/local/nginx/conf/nginx.conf
http {
    server {
        listen 80;
        server_name  www.qingjun.com;
        location ~  /img {
            root /usr/local/nginx/html;
        }
    }
}

在这里插入图片描述

2.修改图片目录名,此时使用img路径就访问不到这个图片。

mv /usr/local/nginx/html/img /usr/local/nginx/html/qingjun

在这里插入图片描述
3.添加rewrite重写url规则,再次访问。

http {
    server {
        listen 80;
        server_name  www.qingjun.com;
        location ~  /img {
            root /usr/local/nginx/html;
            rewrite ^/img/(.*\.jpg)$ /qingjun/$1 break;    //img交给qingjun去找,$1等于括号里的内容。
        }
        location ~  /qingjun {        //指定图片正确存在的路径。
            root /usr/local/nginx/html;
        }
    }
}

在这里插入图片描述
4.若目标地址不在源地址的根下,则需要定义源地址的根。

//将图片地址移到其他位置。
mv /usr/local/nginx/html/qingjun /opt/

//修改配置文件。
http {
    server {
        listen 80;
        server_name  www.qingjun.com;
        location ~  /img {
            root /opt;         //也要改成图片正确位置的上一级目录。
            rewrite ^/img/(.*\.jpg)$ /qingjun/$1 break;
        }
        location ~  /qingjun {      //图片正确位置。
            root /opt;
        }
    }
}

在这里插入图片描述

7.2 uri——>其他网址

1.定义一个正常访问网站。

http {
    server {
        listen 80;
        server_name  www.qingjun.com;
        location   /qingjun {
            root /usr/local/nginx/html;
            index index.html index.htm;
        }
    }
}

//定义网页文件
mkdir /usr/local/nginx/html/qingjun
echo 'hehe' > /usr/local/nginx/html/qingjun/index.html

在这里插入图片描述
2.使用rewrite重定向,使其访问http:ip/qingjun会跳转到其他网址。

http {
    server {
        listen 80;
        server_name  www.qingjun.com;
        location   /qingjun {
            root /usr/local/nginx/html;
            index index.html index.htm;
            rewrite ^/qingjun/(.*)$ https://blog.csdn.net/yi_qingjun?spm=1011.2415.3001.5343;
        }
    }
}

在这里插入图片描述

3.调用其他网站的图片让客户访问。访问img转到其他网址。

http {
    server {
        listen 80;
        server_name  www.qingjun.com;
        location   /img {
            root /usr/local/nginx/html;
            index index.html index.htm;
            rewrite ^/img/(.*)$ https://cn.bing.com/images/search?view=detailV2&ccid=CxDCuKuu&id=FBA838ACF064A76AC0058220B2B6BCB1CBBD5DE6&thid=OIP.CxDCuKuuVVfXZ_eDRcfDuQHaEK&mediaurl=https%3a%2f%2fts1.cn.mm.bing.net%2fth%2fid%2fR-C.0b10c2b8abae5557d767f78345c7c3b9%3frik%3d5l29y7G8trIggg%26riu%3dhttp%253a%252f%252fi3.img.969g.com%252fdown%252fimgx2014%252f02%252f08%252f289_093214_13ee6.jpg%26ehk%3dDz0E1RuS%252fO0MM4sqy3TBm9fhMKtoEti9THnsNH%252buZY0%253d%26risl%3d%26pid%3dImgRaw%26r%3d0&exph=1080&expw=1920&q=%e7%b2%be%e7%be%8e%e5%a3%81%e7%ba%b8&simid=608041651648332714&FORM=IRPRST&ck=912A8F3A94487DA462B2C2764AC15A4A&selectedIndex=0&ajaxhist=0&ajaxserp=0;
        }
    }
}

在这里插入图片描述

7.3 uri——>uri——>uri

1.修改图片地址。

在这里插入图片描述

2.修改配置文件。

http {
    server {
        listen 80;
        server_name  www.qingjun.com;
        location   /img {
            root /opt;
            rewrite ^/img/(.*\.jpg)$ /image/$1 last;
        }
        location   /image {
            root /opt;
            rewrite ^/image/(.*\.jpg)$ /images/$1 last;
        }
    }
}

3.重启服务,访问网页。
在这里插入图片描述

八、if判断

语法应用场景
if (condition) {…}server段、location段
condition类型释义
变量变量值为空串,或者以“0”开始,则为false,其它的均为true
以变量为操作数构成的比较表达式可使用=,!=类似的比较操作符进行测试
正则表达式的模式匹配操作~:区分大小写的模式匹配检查。
~:不区分大小写的模式匹配检查。
!~和!~
:对上面两种测试取反
测试指定路径为文件的可能性-f,!-f
测试指定路径为目录的可能性-d,!-d
测试文件的存在性-e,!-e
检查文件是否有执行权限-x,!-x

8.1 浏览器分离

http {
    server {
        listen 80;
        server_name  www.qingjun.com;
        
        if ($http_user_agent ~ firefox) {
            rewrite ^(.*)$ /firefox/$1 break;
        }
        if ($http_user_agent ~ MSIE) {
            rewrite ^(.*)$ /msie/$1 break;
        }
        if ($http_user_agent ~ Chrome) {
            rewrite ^(.*)$ /chrome/$1 break;
        }
        
        location   / {
            root html;
            index index.html;
        }
    }
}

8.2 防盗链

location ~* \.(jpg|gif|jpeg|png)$ {
  valid_referers none blocked www.idfsoft.com;
  if ($invalid_referer) {
    rewrite ^/ http://www.idfsoft.com/403.html;
  }
}

九、反向代理与负载均衡

  • nginx实现动静分离。在反向代理的时候,若是静态资源,就直接从nginx发布的路径去读取,而不需要从后台服务器获取了。但是这种情况下需要保证后端和前端程序一致,可以使用Rsync做服务端自动同步或者使用NFS、MFS分布式共享存储。
  • 常用模块是proxy_pass和proxy_cache。模块使用都时需要编译进nginx的。

9.1 基本了解

  • nginx通过upstream模块来实现简单的负载均衡,upstream需要定义在http段内。
  • 在upstream段内,定义一个服务器列表,默认方式是轮询。

1.第一步。若要确定同一个访问者发出的请求总是由同一个后端服务器来处理,可以设置ip_hash,如下配置:

//注意:这个方法本质还是轮询,而且由于客户端的ip可能是不断变化的,比如动态ip,代理,翻墙等,因此ip_hash并不能完全保证同一个客户端总是由同一个服务器来处理。
upstream www.qingjun.com {
  ip_hash;
  server 127.0.0.1:9080 weight=5;
  server 127.0.0.1:8080 weight=5;
  server 127.0.0.1:1111;
}

2.第二步。定义好upstream后,需要在server段内添加如下内容:

server {
  location / {
    proxy_pass http://www.qingjun.com;
  }
}

9.2 示例

主机IP安装的服务
lb192.168.161.129nginx
RS1192.168.161.131httpd
RS2192.168.161.132httpd

1.在RS1和RS2上安装服务。

//RS1
yum -y install httpd
echo 'RS1' > /var/www/html/index.html
systemctl start httpd

//RS2
yum -y install httpd
echo 'RS2' > /var/www/html/index.html
systemctl start httpd

在这里插入图片描述
2.配置nginx负载均衡。

http {
    upstream www.runtime.com {     //这个名称需要与下面的location名称一致。
        server 192.168.161.131;     //负载哪个后端服务。
        server 192.168.161.132;
    }
    server {
        listen 80;
        server_name  www.qingjun.com;
        location   / {
            proxy_pass http://www.runtime.com;    //固定写法,只需要修改名称即可。
        }
    }
}

在这里插入图片描述
3.设置权重访问。

http {
    upstream www.runtime.com {
        server 192.168.161.131 weight=3;    //添加weight=3意味着访问3次,不设置则默认访问1次。
        server 192.168.161.132;
    }
    server {
        listen 80;
        server_name  www.qingjun.com;
        location   / {
            proxy_pass http://www.runtime.com;
        }
    }
}

在这里插入图片描述
4.设置始终要同一个后端服务器处理请求。访问显示是随机的,之后一致是该服务器处理请求。(存在瑕疵,慎用)

http {
    upstream www.runtime.com {
        ip_hash;
        server 192.168.161.131;
        server 192.168.161.132;
    }
    server {
        listen 80;
        server_name  www.qingjun.com;
        location   / {
            proxy_pass http://www.runtime.com;
        }
    }
}

在这里插入图片描述

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

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

相关文章

文件加密软件哪个好?文件加密方法介绍

为了避免数据泄露事件的发生,电脑中的重要文件需要采用加密的方法进行保护。那么,文件加密软件哪个好呢?下面我们就一起来了解一下。 EFS加密 除了Windows的家庭版系统外,其他版本的系统均拥有EFS文件加密功能,它可以…

Linux 学习记录53(ARM篇)

Linux 学习记录53(ARM篇) 本文目录 Linux 学习记录53(ARM篇)一、内存读写指令1. 在C语言中读取内存2. 指令码及功能3. 格式4. 使用示例5. 寻址方式(1. 前索引方式(2. 后索引方式(3. 自动索引 6.批量寄存器操作指令(1. 操作码(2. 格式(3. 使用示例(4. 地址增长方式>1 ia后缀&…

【论文学习】Distortion Agnostic Deep Watermarking

一、前言 论文链接:Distortion Agnostic Deep Watermarking 论文主要内容: 该文献提出了一种失真不可知的鲁棒水印模型,以解决现有DNN鲁棒水印方法的局限性。现有的DNN鲁棒水印方法,通常是在训练阶段将各类失真(例如…

Databend 开源周报第 102 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 为指定列创建 B…

DataTable数据对比

DataTable数据对比 文章目录 DataTable数据对比前言一、计算DataTable差集结构不同的情况结构相同的情况 二、计算DataTable交集结构不同的情况结构相同的情况 三、计算DataTable的并集合两个DaTable结构相同的情况计算并集 前言 开发中我们经常会出现查询数据库后返回DataTab…

Spring Data JPA使用规则和审计的学习

一、引入依赖 完整的pom文件如下所示: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…

idea 常用快捷键总结

IDEA常用快捷键总结 很多新手小白在使用IDEA进行代码编写的时候 对快捷键很感兴趣 这里泡泡给大家总结了一些常用的快捷键 希望能帮助到你 记得要收藏下来时常观看并且练习&#xff0c;才能熟练哦~ 1. 根据psvm或者main快速生成主函数 我们可以在类中输入psvm 或者main 然后I…

数据结构day4(2023.7.18)

一、Xmind整理&#xff1a; 链表的插入和删除&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;顺序表去重 33 22 22 11 11 i jfor(int i0;i<list->len-1;i){for(int ji1;j<len;j){if(list->data[i]list->data[j]){delete_by_sub(j,list); …

springmvc @RequestMapping注解中produces以及consumes属性的含义(转载请删除括号里的内容)

http协议基础知识 首先需要了解什么叫MediaType&#xff08;媒体类型&#xff09;&#xff1f; 通俗来说&#xff0c;在http协议中&#xff0c;用来表示传输内容的格式就是MediaType&#xff0c;比如text/html&#xff0c;application/json等&#xff0c;其中text代表介质&am…

win7系统电脑怎么在桌面上悬挂工作日程安排清单显示呢?

在现代快节奏的工作环境中&#xff0c;合理安排和管理工作日程是非常重要的。而在电脑桌面上悬挂工作日程安排清单显示&#xff0c;可以让我们随时了解自己的任务和工作进度&#xff0c;提高工作效率。那么&#xff0c;如何在Win7系统电脑上实现这一功能呢&#xff1f; 今天我…

第六章内存保护单元(Cortex-M7 Processor)

目录 第六章内存保护单元 6.1关于MPU 6.2MPU功能描述 6.3MPU编程器模型 第六章内存保护单元 介绍MPU (Memory Protection Unit)。它包含以下部分: 关于第6-2页的MPU。MPU功能描述见第6-3页。MPU程序员模型在第6-4页。 6.1关于MPU MPU是内存保护的可选组件。处理器支持标准…

【算法基础:数据结构】2.3 并查集

文章目录 并查集算法原理&#xff08;重要&#xff01;⭐&#xff09; 经典例题836. 合并集合&#xff08;重要&#xff01;模板&#xff01;⭐&#xff09;837. 连通块中点的数量&#xff08;维护连通块大小的并查集&#xff09;240. 食物链&#xff08;维护额外信息的并查集&…

【Spring | 应用上下文】

应用上下文 应用上下文和资源路径构造应用上下文构造ClassPathXmlApplicationContext实例 — 快捷方式使用通配符蚂蚁式图案类路径&#xff1a;前缀 应用上下文和资源路径 本节介绍如何使用资源创建应用程序上下文&#xff0c;包括使用 XML 的快捷方式、如何使用通配符以及其…

能耗管理平台保障用电的安全

安科瑞虞佳豪 壹捌柒陆壹伍玖玖零玖叁 6月12日&#xff0c;江苏盐城射阳县某民房起火&#xff0c;消防救援人员到场后&#xff0c;立即对火势进行扑救&#xff0c;经过20多分钟的处置&#xff0c;现场明火全部被扑灭&#xff0c;据了解&#xff0c;起火原因是电线老化短路引发…

Mac下makefile使用openssl库

程序报错 ./polipo.h:208:10: fatal error: openssl/ssl.h file not found 安装和查找openssl开发库 brew install brew --prefix openssl cd /opt/homebrew/opt/openssl3 cd lib cd pkgconfig 通过makefile配置include文件和lib文件 pkg-config方式 lib文件查找&#xf…

C# 同构字符串

205 同构字符串 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一个字符…

Mysql教程(五):DQL学习

Mysql教程&#xff08;五&#xff09;&#xff1a;DQL学习 DQL Data Query Language 数据查询语言&#xff0c;用来查询数据库中表的记录 1 基本语法 DQL查询语句&#xff0c;语法结构如下&#xff1a; SELECT字段列表 FROM表名列表 WHERE条件列表 GROUP BY分组字段列表 HAVI…

工时管理为何对项目如此重要?8Manage 带你读懂!

“时间就是金钱”&#xff0c;相信作为管理者都已经听腻了这话&#xff0c;但在项目管理中确实是真理。你要知道项目工时是会直接影响到项目费用成本的&#xff0c;不论项目工作是按小时还是按固定费用计费和付款&#xff0c;在一段工时内完成的工作越多&#xff0c;说明效率就…

myAgv的slam算法学习以及动态避障下篇

引言 在之前的一篇文章中有提到购入了一台myAGV&#xff0c;以树莓派4B为控制核心的移动机器人。上篇文章中向大家介绍了myAGV如何实现建图、导航以及静态避障&#xff0c;但我们深知&#xff0c;这只是机器人自主导航能力的基础。在实际应用场景中&#xff0c;机器人需要面对复…

【个人笔记】linux命令之ls

目录 Linux中一切皆文件ls命令常用参数常用命令lscpu lspci Linux中一切皆文件 理解参考&#xff1a;为什么说&#xff1a;Linux中一切皆文件&#xff1f; ls命令 ls&#xff08;英文全拼&#xff1a; list directory contents&#xff09;命令用于显示指定工作目录下之内容…