CHAPTER 3 Web Server - httpd配置(二)

news2025/3/1 18:28:19

Web Server - httpd配置二

    • 3.1 httpd配置
      • 3.1.1 基于用户的访问控制
      • 3.1.2 basic认证配置示例:
        • 1. 添加用户
        • 2. 添加网页文件
        • 3. 定义安全域
        • 4. 修改父目录权限
        • 5. 访问效果
        • 6. 在配置文件中定义一个".htaccess"隐藏文件
        • 7. 添加组
      • 3.1.3 虚拟主机
        • 1. 构建方案
        • 2. 基于IP的虚拟主机示例
        • 3. 基于端口的虚拟主机
        • 4. 基于FQDN的虚拟主机
        • 5. 开启status功能
    • 3.2 httpd的功能特性:
      • 3.2.1 CGI:Common gateway interface
      • 3.2.2 ScriptAlias 指令,配置脚本执行目录
      • 3.2.3 使用mod_deflate模块压缩页面优化传输速率
      • 3.2.4 https(http over ssl),使用mod_ssl支持https
    • 3.3 常用命令、工具
      • 3.3.1 常用命令
      • 3.3.2 常用工具

3.1 httpd配置

3.1.1 基于用户的访问控制

认证质询:

WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供帐号及密码

认证:

Authorization:客户端用户填入帐号和密码后在此发送请求报文;认证通过时,则服务器发送响应的资源

认证方式:

basic:明文
digest:消息摘要认证

安全域:

需要用户认证后方能访问的路径;应该通过名称对其进行标示,仪表告知用户认证的原因

用户的帐号和密码存放在何处?

虚拟帐号:仅用于访问某服务时用到的认证标示
存储:文本文件(httpd-tools/htpasswd加密工具),SQL数据库,ldap目录存储

添加用户:
使用专用命令完成此类文件的创建及用户管理,格式

htpasswd [options] /path/to/dir username passwd 
        -c 自动创建此处制定文件,仅应该在此文件不存在时使用
        -m:md5格式加密
        -s:sha格式加密
        -D:删除指定用户
        -b:在命令行中一并输入用户名和密码而不是根据提示输入密码
        -p:明文密码

默认md5加密 -m

htpasswd -b -c /tmp/test.users tom 123456
创建用户tom,密码1234567,并创建密码文件test.users

添加组:

[root@k8s-node-02 apache]# cat /usr/local/apache/conf/users.group
testgrp: tom jason		#每一行定义一个组,组中的用户用空格分开

配置文件:
httpd支持自定义配置文件,即不必把所有配置文件都写入主配置文件

user/group:进程安全上下文,一个进程是否能访问某个文件,取决于2者:

1.运行这个进程的用户身份,
2.文件的属主属组

指定以那个用户的身份运行httpd服务进程

       /etc/httpd/httpd.conf        
        user apache
        group apache

配置文件中指定user为apache
Suexec:访问服务器其他非apache用户权限,只是一个解决方案,并不安全

3.1.2 basic认证配置示例:

基于用户搭建

1. 添加用户

[root@k8s-node-02 conf]# htpasswd -c -b ./users.passwd tom 123456
Adding password for user tom
[root@k8s-node-02 conf]# cat users.passwd
tom:$apr1$oyXRu1eD$PFtacQ2r/ioGiwZ9yJ4k8/

2. 添加网页文件

[root@k8s-node-02 apache]# cat htdocs/doc/d.html
<h1>hello python!</h1>

3. 定义安全域

<Directory "/usr/local/apache/htdocs/doc/">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "input account and passwd"
        AuthUserFile "/usr/local/apache/conf/users.passwd"
        #Require valid-user
        Require user tom

</Directory>

允许帐号文件中的所有用户登陆访问;
Require valid-user

4. 修改父目录权限

如果仅添加控制块并不能起作用,因为父目录的权限是允许全部访问,而子目录继承父目录权限。所以还应该把父目录权限进行修改,账号密码才能起作用

DocumentRoot "/usr/local/apache/htdocs"
<Directory "/usr/local/apache/htdocs">
...
    Options Indexes FollowSymLinks
...
    AllowOverride None
...
    Require all denied
    Require user tom
</Directory>

5. 访问效果

在这里插入图片描述

在这里插入图片描述

6. 在配置文件中定义一个".htaccess"隐藏文件

[root@k8s-node-02 apache]# cat htdocs/doc/.htaccess
AuthType Basic
AuthName "Welecon to Login"
AuthUserFile "/usr/local/apache/conf/users.passwd"
Require user jason tom

此处我们允许jason和tom用户访问,若允许账号验证文件的所有用户均有权限访问可直接写"Require valid-user"即可。
为什么".htaccess"文件客户端看不到呢?

<Files ".ht*">
    Require all denied
</Files>

7. 添加组

基于组帐号进行认证

<Directory "">
    Options None
    AllowOverride None
    AuthType Basic
    AuthName "String"(提示用户为什么认证)
    AuthUserFile "/PATH/TO/DIR"(/tmp/test.users)
    AuthGroupFIle "/paht/to/group_file"
    Require group groupname1 grpname2...
</Directory>

配置

[root@k8s-node-02 apache]# cat /usr/local/apache/conf/users.group	#添加组
testgrp: tom jason
...
<Directory "/usr/local/apache/htdocs/doc/">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "please input account and passwd"
        AuthUserFile "/usr/local/apache/conf/users.passwd"
        AuthGroupFile "/usr/local/apache/conf/users.group"			#配置组文件路径
        #Require valid-user
        #Require user tom
        Require group testgrp										#设置组权限
</Directory>

3.1.3 虚拟主机

站点标识:socket

  • IP相同,端口不同;
  • IP不同,端口均为默认
  • IP和端口相同,FQDN不同

1. 构建方案

创建虚拟主机有三种实现方案:

  • 基于IP:
    为每个虚拟主机准备至少一个ip
  • 基于端口:
    为每个虚拟主机使用至少一个独立port
  • 基于FQDN:
    为每个虚拟主机使用至少一个FQDN

注意:http2.2 一般虚拟主机不要与中心主机户混用,要使用虚拟主机,先禁用main主机
禁用方法:注释中心主机的DocumentRoot指令即可

2. 基于IP的虚拟主机示例

① 在本机添加三个IP,并制作网页

ip address add 192.168.0.10/24 dev ens33
ip address add 192.168.0.11/24 dev ens33
ip address add 192.168.0.12/24 dev ens33
mkdir /www;cd /www;mkdir {10..12};
echo 'welcome 10.com' > 10/index.html
echo 'welcome 10.com' > 11/index.html
echo 'welcome 10.com' > 12/index.html

② 修改主配置文件,取消对virtual host的配置文件路径注释

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

③ 编辑conf/extra/httpd-vhosts.conf

[root@k8s-node-02 conf]# cat extra/httpd-vhosts.conf
<VirtualHost 192.168.0.10:80>
    ServerName "www.10.com"			#域名
    DocumentRoot "/www/10/htdocs"	#文档路径
    <Directory "/www/10/htdocs">	#授权
        Options None
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost 192.168.0.11:80>
    ServerName www.11.com
    DocumentRoot "/www/11/htdocs"
    <Directory "/www/11/htdocs">
          Options None
          Require all granted
    </Directory>

</VirtualHost>

<VirtualHost 192.168.0.12:80>
    ServerName www.12.com
    DocumentRoot "/www/12/htdocs"
    <Directory "/www/12/htdocs">
         Options None
         Require all granted
    </Directory>

</VirtualHost>

④ 检查语法并重启httpd

httpd -t
systemctl restart httpd

⑤ 测试

[root@k8s-node-02 conf]# curl 192.168.0.10
welcome 10.com
[root@k8s-node-02 conf]# curl 192.168.0.11
welcome 11.com
[root@k8s-node-02 conf]# curl 192.168.0.12
welcome 12.com

3. 基于端口的虚拟主机

添加监听端口:Listen 8082

[root@k8s-node-02 extra]# cat httpd-vhosts.conf
Listen 8082
Listen 8083
<VirtualHost *:80>
    ServerName "www.10.com"
    DocumentRoot "/www/10/htdocs"
    <Directory "/www/10/htdocs">
        Options None
        Require all granted
    </Directory>
    ErrorLog "logs/www.10.com-error_log"
    CustomLog "logs/www.10.com_log" common
</VirtualHost>
<VirtualHost *:8082>
    ServerName www.11.com
    DocumentRoot "/www/11/htdocs"
    <Directory "/www/11/htdocs">
          Options None
          Require all granted
    </Directory>

</VirtualHost>
<VirtualHost *:8083>
    ServerName www.12.com
    DocumentRoot "/www/12/htdocs"
    <Directory "/www/12/htdocs">
         Options None
         Require all granted
    </Directory>

</VirtualHost>

笔者基于端口配置不好用,鼓捣半天也没解决,先躺着,回头再来解决。

4. 基于FQDN的虚拟主机

修改ServerName,配置/etc/hosts

[root@k8s-node-02 extra]# cat httpd-vhosts.conf
<VirtualHost 192.168.0.10:80>
    ServerName "www.10.com"
    DocumentRoot "/www/10/htdocs"
    <Directory "/www/10/htdocs">
        Options None
        Require all granted
    </Directory>
    ErrorLog "logs/www.10.com-error_log"
    CustomLog "logs/www.10.com_log" common
</VirtualHost>
<VirtualHost 192.168.0.10:80>
    ServerName www.11.com
    DocumentRoot "/www/11/htdocs"
    <Directory "/www/11/htdocs">
          Options None
          Require all granted
    </Directory>

</VirtualHost>
<VirtualHost 192.168.0.10:80>
    ServerName www.12.com
    DocumentRoot "/www/12/htdocs"
    <Directory "/www/12/htdocs">
         Options None
         Require all granted
    </Directory>

</VirtualHost>
[root@k8s-node-02 extra]# cat /etc/hosts
192.168.0.10 www.10.com
192.168.0.10 www.11.com
192.168.0.10 www.12.com
[root@k8s-node-02 extra]# curl www.10.com
welcome 10.com
[root@k8s-node-02 extra]# curl www.11.com
welcome 11.com
[root@k8s-node-02 extra]# curl www.12.com
welcome 12.com

5. 开启status功能

1.加载mod_status.so模块

①编辑httpd.conf文件vim /usr/local/apache/conf/httpd.conf
②查看行 LoadModuls status_module modules/mod_status.so 前是否有注释符号#,如果有则去掉,如果没有则直接进行下一步操作。

2.加载status模块的配置文件

①编辑httpd.conf文件vim /usr/local/apache/conf/httpd.conf
②查看行 Include conf/extra/httpd-info.conf 前是否有注释符号#,如果有则去掉,如果没有则直接进行下一步操作。

3.开启详细状态功能

①编辑httpd-info.conf文件vim /usr/local/apache/conf/extra/httpd-info.conf
②查看行 ExtendedStatus On 前是否有注释符号#,如果有则去掉,如果没有则直接进行下一步操作。

设置完这些,重启apache服务后我们就可以通过域名/server-status查看apache允许状态了,接下来我们来配置针对status页面做认证

关于httpd-info.conf配置内容
① http2.2

            <Location /server-status>
                SetHandler server-status
                Order allow,deny
                Allow from 172.16
            </Location>

② http2.4

            <Location /server-status>
                SetHandler server-status
                Require ip 172.16
            </Location>

3.2 httpd的功能特性:

3.2.1 CGI:Common gateway interface

CGI脚本由服务器调用, 基于浏览器的数据输入. 其工作原理如下:

1 一个URL指向一个CGI脚本. 一个CGI脚本的URL能如普通的URL一样出现,区别于.htm/.html静态URL,CGI的URL是动态URL。如http://xxxx.com/cgiurl
2 服务器CGI接收浏览器的请求, 按照那个URL指向对应的脚本文件(注意文件的位置和扩展名),执行CGI脚本.
3 CGI脚本执行基于输入数据的操作,包括查询数据库、计算数值或调用系统中其他程序.
4 CGI脚本产生某种Web服务器能理解的输出结果.
5 服务器接收来自脚本的输出并且把它传回浏览器,让用户了解处理结果

3.2.2 ScriptAlias 指令,配置脚本执行目录

将URL映射到文件系统位置,并将目标指定为CGI脚本。例:Script Alias "cgi-bin" "/usr/local/apache/cgi-bin/" 表示访问 ​ ​http://www.itwish.cn/cgi-bin/test​​ 时,目录映射地址为/usr/local/apache/cgi-bin/test

语法1:ScriptAlias [URL-path] file-path|directory-path

# 定义/cgi-bin/ 目录映射到 /web/cgi-bin/ 目录 ,1)功能等同于2) ,注意结尾的"/"
1)
ScriptAlias "/cgi-bin/" "/web/cgi-bin/"       
2)
Alias "/cgi-bin/" "/web/cgi-bin/"
<Location "/cgi-bin">
    SetHandler cgi-script
    Options +ExecCGI
</Location>

主配置文件:

[root@VM httpd]# vi httpd.conf    # 调整配置文件
<IfModule mpm_prefork_module>
        LoadModule cgi_module modules/mod_cgi.so	#根据不同工作模式,打开不同的cgi模块
</IfModule>

<IfModule alias_module>
    #
    ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"      
    # 定义目录/cgi-bin/ 目录映射到 /usr/local/apache/cgi-bin/ 目录 
</IfModule>
 
<Directory "/usr/local/apache/cgi-bin">    # 定义目录属性 
    AllowOverride none
    Options none
    Require all granted
</Directory>

创建测试脚本

[root@VM cgi-bin]# vi   test1      # 在cgi-bin目录中创建test1 bash 脚本 
#!/bin/bash
cat << EOF
Content-Type: text/html
                            # 注意改行为空行 
<pre>
<h1>The hostname is `hostname`. </h1>     # 显示主机名 ,使用bash命令 hostname 实现 
The time is `date`.                    # 显示当前访问日期 ,使用bash命令 date 实现
</pre>
                            # 改行为空行 
EOF
    
[root@VM cgi-bin]# vi test2           # 在cgi-bin目录中创建test2   perl 脚本 
#!/usr/bin/perl
print "content-type: text/html","\n\n";
print "<HTML>","\n";
print "<HEAD>","\n";
print "<TITLE>Perl</TITLE>","\n";
print "</HEAD>","\n";
print "<BODY>","\n";
print "<H1>Hello World</H1>","\n";
print "</BODY>","\n";
print "</HTML>","\n";
 
[root@VM ]# chmod o+x /usr/local/apache/cgi-bin/{test1,test2}     # 注意 ,一定要给与脚本执行权限  
 
[root@VM cgi-bin]# curl http://192.168.71.253/cgi-bin/test1            # 测试 test1 脚本执行状况
<pre>
<h1>The hostname is VM. </h1>
The time is Wed Aug 15 19:26:56 CST 2018.
</pre>
 
[root@k8s-node-02 apache]# curl http://192.168.71.253/cgi-bin/test2	#  测试test2  perl脚本执行状况
<HTML>
<HEAD>
<TITLE>Perl</TITLE>
</HEAD>
<BODY>
<H1>Hello World</H1>
</BODY>
</HTML>

在这里插入图片描述

3.2.3 使用mod_deflate模块压缩页面优化传输速率

使用场景:

1.节约带宽
2.压缩适合于压缩的资源

        SetOutputFilter DEFLATE 设置过滤器

        AddOutputFIlterByType DEFLATE text/html
        ...
        
        
        DeflateCompressionLevel 9    压缩比
        
        BrowserMatch ^Mozilla/4 gizp-only-text/html

        BrowserMatch ^Mozilla/4\.0[678] no-gzip

3.2.4 https(http over ssl),使用mod_ssl支持https

ssl会话简化流程:

  1. 客户端发送可供选择的加密方式,并向服务器请求证书
  2. 服务器端发送证书以及选定的加密方式给客户端
  3. 客户端取得证书并进行证书验证
    如果信任给其发证书CA:
    a,验证证书来源的合法性,用CA的公钥解密证书上的数字签名
    b,验证证书内容的合法性;完整性
    c,检查证书的有效期限
    d,检查证书是否被吊销
    e,证书中拥有者的名字,与访问的目标主机要一致
  4. 客户端生成临时会话密钥(对称密钥),并使用服务器的公钥加密此数据发送给服务器,完成密钥交换
  5. 服务器用此密钥加密用户请求的资源,响应客户端

注意:ssl会话是基于ip地址创建;所以单ip的主机上,仅可以使用一个https虚拟主机

            yum install mod_ssl

术语:PKI CA CRL X.509(V1,v2,v3)
配置httpd支持https:

  1. 为服务器申请数字证书
    测试:通过私建CA发证书

a,创建私有ca
b,在服务器创建证书签署请求
c,ca签证

  1. 配置httpd支持使用ssl,及使用证书
    配置文件:/etc/httpd/conf.d/ssl.conf

DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile

  1. 测试基于https访问相应的主机
openssl s_client [-connect host:port][-cert filename][-CApath directroy][-CAfile filename]

3.3 常用命令、工具

3.3.1 常用命令

部分命令仅限yum安装使用

yum install httpd –y				#安装httpd
yum info httpd						#查看httpd安装包信息
yum list all http*					
rpm -ql httpd-tools
yum repolist
yum clean all
yum install httpd-manual
httpd -t 							#httpd语法测试
配置文件:/etc/httpd/conf
log:/var/log/httpd
网页文件:/var/www/html,默认根
ss -ntl : port 80
默认页:/etc/httpd/conf.d/welcome.conf
loadmodule
httpd -M |grep mpm
httpd.worker -M切换模式
httpd -l 列出模块

3.3.2 常用工具

http 2.4命令行客户端工具

  1. curl命令
    curl - transfer a URL
	curl [options] [URL...]
    options:
        -A:-A, --user-agent STRING模拟自己是什么用户代理的 *
        --basic使用http基本认证
        --tcp-nodelay使用TCP_NODELAY
        -e/--referer<url>:上一跳 * 
        --cacert<file> ca证书(ssl)
        --compressed要求返回是压缩格式 *
        -H/--header<line>自定义首部信息传递给服务器
        -I/--head 只显示响应报文首部信息
        --limit-rate<rate>设置传输速率
        -u/--user[:password]设置服务器的用户密码
        -0(零)/--http1.0 使用http1.0
  1. elinks:
        elinks [options] url
            -dump 一次显示,直接结束,不进入交互模式
  1. httpd自带的工具等

htpasswd
apachectl
rotatelogs:日志滚动工具dd
suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户运行
ab:apache bench

  1. httpd的压力测试工具

ab,webbench,http_load,selge
jmeter loadrunner
tcpcopy

  1. 网站指标:

css:级别样式表
pv:page view,一次页面访问,一个页面有10个资源,100W次的资源请求,=10W次页面访问
uv:user view,独立的用户浏览量,
ip:ip地址 ,每个ip地址访问量,小于uv

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

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

相关文章

Storage

WebStorage主要提供了一种机制&#xff0c;可以让浏览器提供一种比cookie更直观的key、value存储方式&#xff1a; localStorage&#xff1a;本地存储&#xff0c;提供的是一种永久性的存储方法&#xff0c;在关闭掉网页重新打开时&#xff0c;存储的内容依然保留&#xff1b;…

TCP/IP网络协议族分成及其每层作用

1、可以分为应用层、传输层、网络层、链路层 2、各层的作用 应用层(可以想象成是快递打包过程) 决定了向用户提供应用服务时通信的活动&#xff0c;将要进行的操作或者数据进行一个打包。 传输层&#xff08;可以理解为选择顺丰、圆通等快递公司&#xff09; 提供数据传输的方…

从混沌到清晰,阿里全球商品类目域建设思考

作者&#xff1a;丁浩然 阿里全球化业务平台团队 商品是电商产品体系核心之一&#xff0c;类目则是商品模型核心之一&#xff0c;类目系统提供的基础业务数据贯穿了整个电商体系。本文将为大家分享商品类目域在全球化过程中的建设与思考。 众所周知&#xff0c;商品是电商产品体…

vue后台管理系统项目-table选择多行数据分页列表、一键全选重置功能

table选择多行数据 功能介绍&#xff1a; 1.列表分页功能&#xff1b; 2.一键全选&#xff0c;选中列表所有数据&#xff1b; 3.全选&#xff0c;选中当前页数据&#xff1b; 4.重置&#xff0c;清除选中状态&#xff1b; 5.列表搜索查询&#xff1b; 效果&#xff1a; 1.列表分…

剑指 Offer 28. 对称的二叉树

剑指 Offer 28. 对称的二叉树 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 请实现一个函数&#xff0c;用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样&#xff0c;那么它是对称的。 例如&#xff0c;二叉树 [1,2,2,3,4,4,3] 是对称的。 但是下…

项目管理中,如何制定一个好的项目计划?

项目计划&#xff0c;是一个项目的起点。计划不清晰&#xff0c;执行力再强也只会让项目跑偏。 制定一个好的项目计划有哪些要点&#xff1a; 1、确定目标 项目目标是项目所要达到的期望结果&#xff0c;拥有明确的目标能够帮助我们做好规划&#xff0c;用有效的方式做正确…

一文带你看透前端世界里的日期时间,对就是Date

很高兴我们能够通过不同空间&#xff0c;不同时间&#xff0c;通过这篇博客相识&#xff0c;那一定是一种缘分&#xff0c;一种你和狗哥的缘分。今天我希望通过这篇博客对我所熟知的前端世界里的日期时间做一个汇总&#xff0c;不止是代码上的汇总哦&#xff01; 目录 一、时区…

​一致魔芋在北交所上市:市值突破11亿元,吴平夫妇为实控人​

2月21日&#xff0c;湖北一致魔芋生物科技股份有限公司&#xff08;下称“一致魔芋”&#xff0c;BJ:839273&#xff09;在北京证券交易所上市。本次上市&#xff0c;一致魔芋的发行价为11.38元/股&#xff0c;发行1350万股&#xff0c;募资总额约为1.54亿元。 本次发行后&…

【语音之家】AI产业沙龙—动手体验语音AI开发利器 - NVIDIA NeMo代码实战

由CCF语音对话与听觉专委会 、中国人工智能产业发展联盟&#xff08;AIIA&#xff09;评估组、NVIDIA、语音之家、希尔贝壳共同主办的【语音之家】AI产业沙龙—动手体验语音AI开发利器 - NVIDIA NeMo代码实战&#xff0c;将于2023年2月28日19:00-20:30线上直播&#xff0c;同时…

详解matplotlib的color配置

详解matplotlib的color配置 Matplotlib可识别的color格式 格式举例RGB或RGBA&#xff0c;由[0, 1]之间的浮点数组成的元组&#xff0c;分别代表红色、绿色、蓝色和透明度(0.1, 0.2, 0.5), (0.1, 0.2, 0.5, 0.3不区分大小写的十六进制RGB或RGBA字符串。‘#0f0f0f’, ‘#0f0f0f…

图像质量的评价指标【PSNR/SSIM/LIPIS/IE/NIE/Prepetual loss】

前言 做插帧这么久了&#xff0c;这几个指标还没系统的研究过&#xff0c;这次开一个博客写下这几个指标的区别 这里贴一个比较全的评价指标的库https://github.com/csbhr/OpenUtility/tree/c9cf713c99523c0a2e0be6c2afa988af751ad161 以以下两张图为例 预测图片 真实图片 …

el-form表单初始化赋值表单dataForm,,校验有问题,校验必填的也校验成功了

大家好啊,今天写表单发现我直接赋值对象 导致初始化校验必填校验成功以及validator校验有误的问题我的其企业名称 在初始化的时候 竟然都校验了 并且看起来像校验成功我在点击下一步的时候validator的时候&#xff0c;竟然也是校验成功&#xff0c;也不提示必填的错误最后检查我…

用 tensorflow.js 做了一个动漫分类的功能(一)

前言&#xff1a;浏览某乎网站时发现了一个分享各种图片的博主&#xff0c;于是我顺手就保存了一些。但是一张一张的保存实在太麻烦了&#xff0c;于是我就想要某虫的手段来处理。这样保存的确是很快&#xff0c;但是他不识图片内容&#xff0c;最近又看了 mobileNet 的预训练模…

【Kafka】三.Kafka怎么保证高可用 学习总结

Kafka 的副本机制 Kafka 的高可用实现主要依赖副本机制。 Broker 和 Partition 的关系 在分析副本机制之前&#xff0c;先来看一下 Broker 和 Partition 之间的关系。Broker 在英文中是代理、经纪人的意思&#xff0c;对应到 Kafka 集群中&#xff0c;是一个 Kafka 服务器节…

Blazor入门100天 : 身份验证和授权 (4) - 自定义字段

目录 建立默认带身份验证 Blazor 程序角色/组件/特性/过程逻辑DB 改 Sqlite将自定义字段添加到用户表脚手架拉取IDS文件,本地化资源freesql 生成实体类,freesql 管理ids数据表初始化 Roles,freesql 外键 > 导航属性完善 freesql 和 bb 特性 本节源码 https://github.com/…

数据备份学习笔记2

Linux实现本地备份的命令&#xff1a; mkdir -p /root/backup/date "%Y-%m-%d" tar -zcvPf /root/backup/date "%Y-%m-%d"/test20230221.tar.gz /root/test20230221/ 我们再看下tar命令选项&#xff1a; tar -czvf txt3.tar.gz txt3 tar -xvf txt4.tar.g…

二叉查找树(C++)

背景&#xff1a; 最近我要学习二叉平衡树了&#xff0c;在学习二叉平衡树之前&#xff0c;我需要学会二叉搜索树&#xff0c;因为二叉平衡树就是根据二叉搜索树的思想进行优化的。 二叉查找树简介&#xff1a; 二叉查找树是什么呢&#xff1f;&#xff08;也叫二叉搜索树&…

国产无线蓝牙耳机哪个好?2023国产无线蓝牙耳机排行

随着蓝牙耳机的快速发展&#xff0c;近几年国产蓝牙耳机更是呈指数式爆发&#xff0c;越来越多的国产蓝牙耳机品牌被人们看到、认可。那么&#xff0c;国产无线蓝牙耳机哪个好&#xff1f;下面&#xff0c;我来给大家推荐几款国产蓝牙耳机&#xff0c;一起来看看吧。 一、南卡…

C语言实现动态管理通讯录信息系统(静态通讯录plus版)

文章目录前言&#xff1a;一.动态管理思想1.通讯录结构体声明发生变化2.通讯录结构体初始化发生变化3.通讯录能够动态增容4.通讯录销毁数据二.优化通讯录可持续读写信息1.保存通讯录中的信息到文件中2.加载文件信息到通讯录中三.源码1.text.c2.contact.c3.contact.h前言&#x…

Kotlin新手教程七(委托)

委托模式是软件设计模式中的一项基本技巧。在委托模式中&#xff0c;有两个对象参与处理同一个请求&#xff0c;接受请求的对象将请求委托给另一个对象来处理。kotlin中使用by实现委托。 一、类委托 类的委托实际就是一个类中定义的方法实际是调用另一个类中的对象的方法来实现…