当前位置: 首页 > news >正文

RedHat9 | Web服务配置与管理(Apache)

一、实验环境

1、Apache服务介绍

Apache服务,也称为Apache HTTP Server,是一个功能强大且广泛使用的Web服务器软件。

起源和背景

  • Apache起源于NCSA httpd服务器,经过多次修改和发展,逐渐成为世界上最流行的Web服务器软件之一。
  • 名字“Apache”源自“a patchy server”的读音,意味着它是一个充满补丁的服务器,这反映了其作为自由软件,不断有人为其开发新功能、新特性和修复缺陷的特点。

特点和优势

  • 简单、速度快、性能稳定:Apache服务器设计简洁,处理请求速度快,且性能稳定可靠。
  • 跨平台性:Apache可以运行在几乎所有的Unix、Windows、Linux等系统平台上,具有高度的可移植性。
  • 源代码开放:Apache是开放源码项目,拥有庞大的开发者社区和广泛的用户基础。
  • 模块化设计:Apache是一个模块化的服务器,可以根据需要加载不同的模块来扩展其功能。
  • 安全性:支持SSL技术,提供安全的Web服务。

主要特性

  • 支持最新的HTTP/1.1通信协议。
  • 拥有简单而强有力的基于文件的配置过程。
  • 支持通用网关接口(CGI)。
  • 支持基于IP和基于域名的虚拟主机。
  • 支持多种方式的HTTP认证。
  • 集成Perl、Python等处理模块。
  • 支持实时监视服务器状态和定制服务器日志。
  • 提供用户会话过程的跟踪。
  • 支持FastCGI和JavaServlets(通过第三方模块)。

2、Nginx服务介绍

Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,由C语言编写。

主要特点

  1. 轻量级:Nginx设计简洁,占用内存少,能在相同的硬件条件下提供更高的服务能力。
  2. 高性能:Nginx通过其事件驱动、异步非阻塞的架构设计,能够高效地处理大量并发连接,对于静态文件请求效率极高。使用epoll(Linux平台)或kqueue(类BSD系统)等高效的I/O多路复用技术来监听和管理连接。
  3. 进程模型:采用“主从”多进程模式,其中master进程负责管理和配置更新,而worker进程负责实际的请求处理,这种设计支持热部署和故障恢复。

优势

  1. 并发性能:Nginx在处理大量并发连接时表现出色,特别是在静态内容处理方面。据称,Nginx可以支持对5万个并发连接数的响应,而只占用很低的内存资源。
  2. 稳定性:Nginx采用了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx官方表示,Nginx保持1万个没有活动的连接,而这些连接只占用2.5MB内存。
  3. 高可用性:Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,几乎可以做到7x24小时不间断地运行。

3、Apache和Nginx的区别

Nginx和Apache各有其独特的特点和优势,适用于不同的场景和需求。在选择Web服务器时,需要根据自己的业务需求、硬件条件以及团队技术栈等因素进行综合考虑。

3.1 设计理念

1、Nginx

  • 专注于高性能、高并发和轻量级。

  • 采用事件驱动、异步非阻塞的架构设计。

  • 适用于处理静态资源、反向代理和负载均衡等场景。

2、Apache

  • 强调稳定性、功能和安全性。
  • 采用进程或线程模型。
  • 适用于处理动态内容和复杂的Web应用程序。
3.2 适用场景

1、Nginx

  • 适用于需要高性能、高并发的场景,如大型门户网站、视频流媒体等。
  • 适合作为反向代理和负载均衡器,为后端服务器集群提供前端服务。
  • 适合处理静态资源,如图片、CSS、JavaScript等。

2、Apache

  • 适用于需要稳定性和强大功能的场景,如中小型网站、企业内部网站等。

  • 适合处理动态内容和复杂的Web应用程序。

  • 适用于需要多种语言支持的场景,如Perl、Python等。

3.3 性能特点

1、Nginx

  • 高并发性能:通过其事件驱动的设计,Nginx能够高效地处理大量并发连接,尤其是静态文件请求。

  • 低内存消耗:Nginx的代码量小,内存占用低,能在资源受限的系统中运行。

  • 可扩展性:支持第三方模块扩展,可以根据需要添加新的功能和服务。

  • 热部署:支持在不停止服务的情况下进行软件升级、配置更改和日志轮转等操作。

2、Apache

  • 稳定性:经过长时间的发展和优化,Apache具有出色的稳定性。
  • 模块化设计:Apache是模块化的服务器,可以根据需要加载不同的模块来扩展其功能。
  • 动态内容处理:对动态请求处理能力强,支持多种编程语言如Perl、Python等。

4、传输层安全性TLS

TLS是一种安全协议,它建立在网络层之上,位于传输层(TCP/IP四层模型的传输层)和应用层之间。TLS的主要目的是在两个通信应用程序之间提供保密性、数据完整性以及真实性。TLS的前身是安全套接层(Secure Sockets Layer,SSL)。网景公司(Netscape)在1994年推出首版网页浏览器时,推出HTTPS协议,以SSL进行加密。后来,互联网工程任务组(IETF)将SSL进行标准化,并于1999年公布第一版TLS标准文件。

OpenSSL是一个强大的安全套接字层密码库,包含了一个多用途的命令行工具,用于实现秘钥证书管理、对称加密、非对称加密等功能。它广泛用于保护计算机网络上的通信免遭窃听,同时确认另一端连接者的身份。OpenSSL是SSL和TLS协议的开源实现,支持多种平台,包括Unix/Linux、Windows、Mac OS等。

工作原理

  • 客户端向服务器发送一个包含客户端支持的TLS版本、加密算法和散列算法等信息的“Client Hello”消息。
  • 服务器响应一个“Server Hello”消息,包含服务器选择的TLS版本、加密算法和散列算法等信息,并发送其数字证书。
  • 客户端验证服务器的证书,并生成一个预主密钥(pre-master secret),使用服务器的公钥加密后发送给服务器。
  • 服务器使用自己的私钥解密预主密钥,双方基于预主密钥和随机数生成会话密钥(session key)。
  • 双方使用会话密钥加密和解密通信数据,确保数据的机密性和完整性。

在创建完证书请求后,会生成多个文件

  • /etc/pki/tls/private/xxx.key:证书私钥,私钥应保持在0600或0400权限。
  • /etc/pki/tls/certs/xxx.csr:证书请求,将此文件发送给CA以进行签名
  • /etc/pki/tls/certs/xxx.crt:公共证书,将证书请求发送到CA后返回的证书文件,权限应该保持0644

5、实验拓扑

标识Web服务器分公司1分公司2
IP地址192.168.110.1/24192.168.110.10/24192.168.120.10/24
软件包httpd.x86_64
账户信息root@Serverroot@company1root@company2

主要配置信息

  • 服务端软件包: httpd.x86_64
  • 主配置文件:/etc/httpd/conf/httpd.conf
  • 服务名:httpd.service
  • 端口号:TCP/80、TCP/443

在这里插入图片描述

二、Apache服务配置信息

1、主配置书写格式

查看主配置文件

cat /etc/httpd/conf/httpd.conf

在Apache中的配置文件共分为三种类型:

  1. 全局配置(在整个服务器生效)

  2. 块级配置(仅在当前块内生效)

  3. 虚拟主机配置

Apache语句的书写格式

  • 键值对方式
Listen 80			# Listen为键,80为值
  • 块级分割,内部为键值对方式
<Directory />                # 通过双标签形式划分块(类似HTML格式)AllowOverride none        # AllowOverride为键,none为值Require all denied
</Directory>

2、 配置文件内容解析

Listen键值的设置,Listen只能设置1个,否则会出错;Listen的值如果设置为IP地址,则必须加上端口号

Listen 80								# 监听任意IP地址的80端口(包含IPv4和IPv6)
Listen 192.168.110.1:80					# 监听192.168.110.1主机上的80端口
Listen 192.168.110.1:8080				# 监听192.168.110.1主机上的8080端口
Listen 0.0.0.0:80						# 监听任意IPv4地址上的80端口
Listen [::0]:80							# 监听任意IPv6地址上的80端口
Listen [2001:db8::2]:80					# 监听IPv6地址2001:db8::2主机上的80端口

**ServerRoot键值的设置,路径最后不要加上 / **

ServerRoot "/etc/httpd"					# 指定Apache配置文件、日志文件存放的地方

Include键值的设置

Include conf.modules.d/*.conf			# 将conf.modules.d目录下的 .conf文件内容引入到主配置文件中,类似主配置文件的子配置文件

User和Group键值的设置

User apache								# 指定Apache守护进程使用的用户
Group apache							# 指定Apache守护进程使用的用户组

ServerAdmin键值的设置

ServerAdmin root@localhost				# 指定管理员邮箱,出现错误时,会发送邮件告知管理员

DocumentRoot键值的设置

DocumentRoot "/var/www/html"			# 设置主目录的路径

EnableSendfile键值的设置

EnableSendfile on 						# 使用操作系统的内核的sendfile支持来发送文件给客户端

ErrorLog和LogLevel键值的设置

ErrorLog "logs/error_log"				# 错误日志的存储位置
LogLevel warn							# 日志的级别

AddDefaultCharset键值的设置

AddDefaultCharset UTF-8					# 设置默认字符集
AddDefaultCharset Off					# 禁用字符集

ServerName键值的设置

ServerName www.meaauf.com:80			# 设置服务器主机名称(如果该域名存在)
ServerName 192.168.10.1:80				# 不存在域名,可使用IP地址+端口号方式

Timeout键值的设置

Timeout 300								# 设置超时时间为300,默认为120,超过时间仍无法连接的则按断线处理

MaxClients键值的设置

MaxClietns 500							# 设置客户最大连接数

3、 目录权限设置

在Apache中,通过双标签形式定义目录:其中权限语句仅对该目录及其子目录生效

<Directory "/var/www">权限语句...
</Directory>

权限语句

【.hataccess】文件需要用户手动创建,文件书写权限语句

AllowOverride None						# 不使用本目录下的文件.htaccess
Require all granted						# 允许访问本目录,建议目录都加上此权限,否则无法访问
Require all denied						# 不允许访问本目录
Deny from 192.168.110.10				# 不允许192.168.110.10主机访问
Deny from .meaauf.com					# 不允许meaauf.com域主机访问
Deny from 192.168.110.0/24				# 不允许192.168.110.0/24网段主机访问
Order allow,deny						# 默认情况下禁止所有客户端访问,且设置允许与拒绝权限的优先级

关于Order语句的设置

  • Order allow,deny:默认情况下拒绝所有客户端访问,如果匹配Allow字段又匹配Deny字段,则会生效Deny
  • Order deny,allow:默认情况下允许所有客户端访问,如果匹配Allow字段又匹配Deny字段,则会生效Allow

具体使用示例

允许所有客户端访问

Order allow,deny
Allow from all

拒绝192.168.110.10和来自meaau.com域的客户端访问,其它客户端可以正常访问

Order deny,allow
Deny from 192.168.110.10
Deny .meaauf.com

仅允许192.168.110.0/24网段的客户端访问,其中的192.168.110.10无法访问

Order allow,deny
Allow from 192.168.110.0/24
Deny from 192.168.110.10

4、文件访问权限设置

在Apache中,通过双标签形式定义文件权限:其中权限语句仅对匹配的文件生效

以下的定义将拒绝访问文件:【.htaccess】和【.htpasswd】

<Files ".ht*">							# 匹配文件名以`.ht`开头的,任意字符结尾的文件Require all denied					# 拒绝访问
</Files>

三、安装Apache服务

搜索Apache软件包

dnf search apache

在这里插入图片描述

安装httpd服务

dnf -y install httpd.x86_64

查看httpd的服务名

rpm -ql httpd | grep service

在这里插入图片描述

启动httpd服务

systemctl enable --now httpd.service

调整防火墙规则

firewall-cmd --add-service=http --permanent
firewall-cmd --reload

在这里插入图片描述

新建索引文件

echo Default Page. > /var/www/html/index.html

修改主配置文件,在主配置文件文件中添加一行

ServerName 192.168.110.1:80

在这里插入图片描述

客户端测试访问
在这里插入图片描述

四、虚拟主机的配置

在Web服务器上,除了默认站点外的其他站点都称为虚拟主机

1、基于IP地址的虚拟主机

将多个网站绑定在不同的IP地址上,访问服务器上不同的IP地址,就可以看到不同的网站。

新建子配置文件,不直接修改主配置文件,方便后续管理

vim /etc/httpd/conf.d/vhost_ip.conf

添加虚拟主机配置信息

<VirtualHost 192.168.120.1>DocumentRoot /var/www/ipServerName 192.168.120.1:80
</VirtualHost><Directory /var/www/ip>Require all grantedAllowOverride None
</Directory>

新建目录和索引文件

mkdir /var/www/ip
echo Virtual host based on IP address. > /var/www/ip/index.html

重新启动httpd服务

systemctl restart httpd.service

在这里插入图片描述

2、基于域名的虚拟主机

将多个网站绑定在不同的域名上,访问不同的域名,就可以看到不同的网站。

新建子配置文件,不直接修改主配置文件,方便后续管理

vim /etc/httpd/conf.d/vhost_domain.conf

添加虚拟主机配置信息

需要先给默认主页定义一个虚拟主机,否则www.meaauf.com解析后会解析为192.168.110.1,页面被转到默认主页去了

<VirtualHost 192.168.110.1>					# 给默认主页定义虚拟主机DocumentRoot /var/www/htmlServerName 192.168.110.1:80
</VirtualHost><VirtualHost 192.168.110.1>					# 然后再给域名定义虚拟主机DocumentRoot /var/www/domainServerName www.meaauf.com:80
</VirtualHost><Directory /var/www/domain>AllowOverride NoneRequire all granted
</Directory>

新建目录和索引文件

mkdir /var/www/domain
echo Domain based virtual hosting. > /var/www/domain/index.html

重新启动httpd服务

systemctl restart httpd.service

客户端访问时需要在本机的hosts文件中添加DNS解析

echo 192.168.110.1  www.meaauf.com  >> /etc/hosts

在这里插入图片描述

3、 基于端口号的虚拟主机

通过给同一个IP地址定义不同的端口号,可以实现不同网站的访问。

新建子配置文件,不直接修改主配置文件,方便后续管理

vim /etc/httpd/conf.d/vhost_port.conf

添加虚拟主机配置信息

Listen 8080
<VirtualHost 192.168.110.1:8080>DocumentRoot /var/www/portServerName 192.168.110.1:8080
</VirtualHost><Directory /var/www/port>AllowOverride NoneRequire all granted
</Directory>

新建目录和索引文件

mkdir /var/www/port
echo Virtual host based on port number. > /var/www/port/index.html

重新启动httpd服务

systemctl restart httpd.service

可以看到无法通过8080端口访问HTTP
在这里插入图片描述

查看Web服务器上的httpd服务的监听端口,查看是否存在8080端口

netstat -tulnp | grep httpd

在这里插入图片描述

查看当前防火墙的放行规则,虽然放行了http服务,但是http服务对应端口为标准的80,而非我们自定义的8080,还需要放行TCP8080端口

firewall-cmd --list-all

在这里插入图片描述

防火墙放行TCP8080端口

firewalld-cmd --add-port=8080/tcp --permanent
firewalld-cmd --reload

在这里插入图片描述

客户端再次访问
在这里插入图片描述

五、用户身份认证

1、.htaccess文件

【.htaccess】文件是一个访问控制文件,用来配置相应目录的访问。按照默认的配置,是不会读取目录下的【.htaccess】文件,因为默认在权限语句中设置为:

AllowOverride none

如果要读取【.htaccess】文件,则需要将值修改为:

AllowOverride AuthConfig

这样就可以读取【.htaccess】文件,可以采用其他的文件名,但是需要修改主配置文件实现。

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

2、用户身份认证

在Apache中可以采用“整体存取控制”或者“分布式存取控制“来实现用户身份验证。htpasswd命令是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。

常用参数

参数作用
-c创建一个加密文件
-m采用MD5算法对密码进行加密
-d采用CRYPT算法对密码进行加密
-p不对密码进行加密,明文显示
-s采用SHA算法对密码进行加密
-D删除指定的用户
-b同时输入用户名和密码,非交互式

【明文创建方式】创建访问用户webuser1,密码为redhat,加密方式为MD5

htpasswd -cmb /var/www/htpasswd webuser1 redhat

在这里插入图片描述

【交互式创建方式】创建访问用户webuser2,密码为redhat,加密方式为明文,在原有文件上添加用户无需加-c

htpasswd -p /var/www/htpasswd webuser2

在这里插入图片描述

修改上述虚拟主机的配置文件

vim /etc/httpd/conf.d/vhost_port.conf

修改为以下内容,增加用户认证

Require的值也可以书写为:【Require user webuser1,webuser2 代表允许访问的用户为webuser1、webuser2】

Listen 8080
<VirtualHost 192.168.110.1:8080>DocumentRoot /var/www/portServerName 192.168.110.1:8080
</VirtualHost><Directory /var/www/port>			AuthName "Please input your password."			# 弹出的认证对话框中的领域名称AuthType Basic									# 指定认证类型为HTTP基本认证AuthUserFile /var/www/htpasswd					# 指定包含用户名和密码的文件路径(需要保证apache用户有权访问)Require valid-user								# 只有在htpasswd中列出的用户才有权访问
</Directory>

也可以将权限语句写到本地的.htaccess文件中

vim /var/www/port/.htaccess# 写入下列内容
AuthName "Please input your password."			
AuthType Basic								
AuthUserFile /var/www/htpasswd					
Require valid-user# 然后修改虚拟主机配置文件,将Directory内容修改
<Directory /var/www/port>AllowOverride AuthConfig						# 使用.htaccess文件
</Directory>

重启服务

systemctl restart httpd.service

客户端访问,会弹出输入用户名和密码
在这里插入图片描述

输入账号和密码后,可以成功访问网页
在这里插入图片描述

经过测试发现,使用webuser2无法登陆,是因为webuser2采用的明文密码的存储方式,在平台上会失效。所以尽量避免使用明文密码存储。
在这里插入图片描述

六、HTTPS服务器配置

1、安装Apache HTTPD模块

Apache HTTPD需要安装扩展模块才能激活TLS支持。通过安装mod_ssl软件包来安装此模块。

查找mod_ssl软件包

dnf search mod_ssl

在这里插入图片描述

安装mod_ssl软件包

dnf -y install mod_ssl

2、SSL配置文件解析

可以看到在httpd目录下多了一个子配置文件ssl.conf,查看SSL主配置文件

rpm -qc mod_ssl

在这里插入图片描述

ssl.conf文件内容解析

Listen 443 https	# 监听端口为https的443端口
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog	 # 当Apache需要SSL私钥的密码时,调用httpd-ssl-pass-dialog来获取密码
SSLSessionCache         shmcb:/run/httpd/sslcache(512000)	# 启用SSL会话缓存,使用共享内存缓冲区来存储会话数(512000为会话数大小)
SSLSessionCacheTimeout  300		# SSL会话缓存的过期时间,单位是秒
SSLCryptoDevice builtin		# 指定使用内置的加密设备<VirtualHost _default_:443>		# 定义一个监听443端口(HTTPS默认端口)的虚拟主机
# General setup for the virtual host, inherited from global configuration	# 从全局配置继承的虚拟主机的常规设置
#DocumentRoot "/var/www/html"		# 删除注释,可以快捷将默认web站点设置为https
#ServerName www.example.com:443		# 删除注释,可以快捷将默认web站点设置为httpsErrorLog logs/ssl_error_log		# 错误日志文件的路径
TransferLog logs/ssl_access_log	# 访问日志文件的路径
LogLevel warn		# 日志级别SSLEngine on	# 启用SSL/TLS功能
SSLHonorCipherOrder on	# 优先使用服务器配置的加密套件顺序
SSLCipherSuite PROFILE=SYSTEM	# 使用系统默认的加密套件配置
SSLProxyCipherSuite PROFILE=SYSTEM	# 用于代理连接的加密套件配置
SSLCertificateFile /etc/pki/tls/certs/localhost.crt		# SSL 证书文件的路径
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key	# SSL 私钥文件的路径
<FilesMatch "\.(cgi|shtml|phtml|php)$">		# 为特定文件模式设置SSL选项SSLOptions +StdEnvVars	# `+StdEnvVars`: 允许 SSL 环境变量被传递给 CGI 脚本
</FilesMatch>
<Directory "/var/www/cgi-bin">		# 为特定目录模式设置SSL选项SSLOptions +StdEnvVars	# `+StdEnvVars`: 允许 SSL 环境变量被传递给 CGI 脚本
</Directory>
BrowserMatch "MSIE [2-5]" \		# 根据浏览器的用户代理字符串设置特定的 SSL 选项nokeepalive ssl-unclean-shutdown \		# 针对旧版 MSIE 浏览器设置了一些兼容性选项downgrade-1.0 force-response-1.0		# 针对旧版 MSIE 浏览器设置了一些兼容性选项
CustomLog logs/ssl_request_log \	# 自定义的访问日志格式"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

3、生成私钥

openssl常见参数

参数作用
-in输入文件
-out输出文件

使用openssl生成私钥

openssl genrsa -out /etc/pki/tls/private/ca.key 2048
  • openssl genrsa:生成RSA私钥
  • -out /etc/pki/tls/private/ca.key:输出到/etc/pki/tls/private目录下,文件名可自定义
  • 2048:RSA私钥的长度
    在这里插入图片描述

4、生成证书请求文件

主题信息

  • C:国家
  • ST:省、州
  • L:城市、地区
  • O:组织
  • OU:组织单位
  • CN:通用名

使用openssl生成证书请求

openssl req -now -key /etc/pki/tls/private/ca.key -out /etc/pki/tls/certs/ca.csr -subj "/C=CN/ST=GD/L=gd/O=meaauf/OU=stu/CN=www.meaauf.com"
  • openssl rsa:创建证书请求
  • -new:创建一个新的证书请求
  • -key /etc/pki/tls/private/ca.key:指定私钥文件文件路径
  • -out:指定证书请求文件保存位置,文件名可以自定义
  • -subj:设置证书请求的主题信息

在这里插入图片描述

5、生成证书

使用openssl生成证书

openssl x509 -req -days 365 -in /etc/pki/tls/certs/ca.csr -signkey /etc/pki/tls/private/ca.key -out /etc/pki/tls/certs/ca.cert
  • x509:生成自签名的X.509证书
  • -req:使用证书请求创建证书
  • -days 365:证书有效期
  • -in /etc/pki/tls/certs/ca.csr:指定证书请求文件
  • -signkey /etc/pki/tls/private/ca.key:指定私钥文件
  • -out:生成证书后的保存路径

在这里插入图片描述

6、将SSL证书与默认站点绑定

测试默认站点的访问是否成功

curl http://192.168.110.1

在这里插入图片描述

编辑ssl.conf主配置文件

vim /etc/httpd/conf.d/ssl.conf

添加下列内容

DocumentRoot "/var/www/html"
ServerName www.meaauf.com:443
SSLCertificateFile /etc/pki/tls/certs/ca.cert
SSLCertificateKeyFile /etc/pki/tls/certs/ca.key

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

检查Apache配置文件语法

apachectl -t

在这里插入图片描述

重启httpd服务

systemctl restart httpd.service

调整防火墙规则

firewall-cmd --add-service=https --permanent
firewall-cmd --reload

在这里插入图片描述

7、客户端访问测试

客户端通过Firefox浏览器访问Web服务,会提示存在潜在风险,因为证书是由服务器自行签发,而非权威CA机构签发
在这里插入图片描述

点击【Advanced】,随后点击【Accept the Risk and Continue接收风险并继续】
在这里插入图片描述

即可显示网页内容

在这里插入图片描述

通过curl命令访问

curl https://192.168.110.1

在这里插入图片描述

使用-k选项不要验证SSL证书后

curl -k https://192.168.110.1

在这里插入图片描述

查看服务器证书详细信息

curl -kv https://192.168.110.1

在这里插入图片描述

七、错误汇总

1、出现AH00558报错

使用命令检测Apache配置文件语法,显示AH00558

[root@Server ~]# apachectl -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe46:70%ens160. Set the 'ServerName' directive globally to suppress this message
Syntax OK

出错原因分析

警告:Apache无法可靠的确定服务器完全限定域名(FQDN)。这可能是因为ServerName指令可能没有被设置在正确的位置,或者它可能被设置在了一个虚拟主机配置块中,而Apache在启动时需要全局的ServerName指令。

解决办法

查看Apache主配置文件中是否配置了ServerName,如果是注释状态,则取消注释加上该选项。
在这里插入图片描述

相关文章:

RedHat9 | Web服务配置与管理(Apache)

一、实验环境 1、Apache服务介绍 Apache服务&#xff0c;也称为Apache HTTP Server&#xff0c;是一个功能强大且广泛使用的Web服务器软件。 起源和背景 Apache起源于NCSA httpd服务器&#xff0c;经过多次修改和发展&#xff0c;逐渐成为世界上最流行的Web服务器软件之一。…...

API-事件监听

学习目标&#xff1a; 掌握事件监听 学习内容&#xff1a; 事件监听拓展阅读-事件监听版本 事件监听&#xff1a; 什么是事件&#xff1f; 事件是在编程时系统内发生的动作或者发生的事情。 比如用户在网页上单击一个按钮。什么是事件监听&#xff1f; 就是让程序检测是否有事…...

如何为自己的项目生成changelog

背景 在github上看到人家的更新日志感觉很cool&#xff0c;怎么能给自己项目来一套呢 环境信息 tdstdsdeMacBook-Pro demo-doc % node -v v14.18.1 tdstdsdeMacBook-Pro demo-doc % npm -v 6.14.15硬件信息 型号名称&#xff1a;MacBook Pro版本&#xff1a; 12.6.9芯片&…...

MySQL之表碎片化

文章目录 1. 前言2. InnoDB表碎片3. 清除表碎片3.1 查找碎片化严重的表3.2 清除碎片 4. 小结5. 参考 1. 前言 周一在对线上表进行数据清除时&#xff0c;发现一个问题&#xff0c;我要清除的单表大概有2500w条数据&#xff0c;清除数据大概在1300w条左右&#xff0c;清除之前通…...

碳+绿证如何能源匹配?考虑碳交易和绿证交易制度的电力批发市场能源优化程序代码!

前言 近年来&#xff0c;面对日益受到全社会关注的气候变化问题&#xff0c;国外尤其是欧美等发达国家和地区针对电力行业制定了一系列碳减排组合机制。其中&#xff0c;碳排放权交易&#xff08;以下简称“碳交易”&#xff09;和绿色电力证书交易&#xff08;以下简称“绿证…...

【原创】springboot+mysql海鲜商城设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…...

envi5.6+SARscape560安装(CSDN_20240623)

envi和SARscape的版本必须匹配&#xff0c;否则有些功能不能使用。 Envi5.6安装 1. 点击安装程序. 2. 进入安装界面&#xff0c;点击“Next”. 3. 选择“I accept the agreement”&#xff0c;点击“Next”。 4. 选择安装路径&#xff0c;建议直接安装在默认路径下&#xff0…...

基本循环神经网络(RNN)

RNN背景&#xff1a;RNN与FNN 在前馈神经网络中&#xff0c;信息的传递是单向的&#xff0c;这种限制虽然使得网络变得更容易学习&#xff0c;但在一定程度上也减弱了神经网络模型的能力。 在生物神经网络中&#xff0c;神经元之间的连接关系要复杂的多。前馈神经网络可以看着…...

win32API(CONSOLE 相关接口详解)

前言&#xff1a; Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&#xff0c;它同时也是⼀个很⼤的服务中⼼&#xff0c;调⽤这个服务中⼼的各种服务&#xff08;每⼀种服务就是⼀个函数&#xff09;&#xff0c;可以帮应⽤程式达到开启视窗、描绘图形…...

python爬虫学习笔记一(基本概念urllib基础)

学习资料&#xff1a;尚硅谷_爬虫 学习环境: pycharm 一.爬虫基本概念 爬虫定义 > 解释1&#xff1a;通过程序&#xff0c;根据URL进行爬取网页&#xff0c;获取有用信息 > 解释2&#xff1a;使用程序模拟浏览器&#xff0c;向服务器发送请求&#xff0c;获取相应信息…...

MyBatis映射器:一对多关联查询

大家好&#xff0c;我是王有志&#xff0c;一个分享硬核 Java 技术的金融摸鱼侠&#xff0c;欢迎大家加入 Java 人自己的交流群“共同富裕的 Java 人”。 在学习完上一篇文章《MyBatis映射器&#xff1a;一对一关联查询》后&#xff0c;相信你已经掌握了如何在 MyBatis 映射器…...

100多个ChatGPT指令提示词分享

当前&#xff0c;ChatGPT几乎已经占领了整个互联网。全球范围内成千上万的用户正使用这款人工智能驱动的聊天机器人来满足各种需求。然而&#xff0c;并不是每个人都知道如何充分有效地利用ChatGPT的潜力。其实有许多令人惊叹的ChatGPT指令提示词&#xff0c;可以提升您与ChatG…...

vue2和vue3数据代理的区别

前言&#xff1a; vue2 的双向数据绑定是利⽤ES5的⼀个 API &#xff0c;Object.defineProperty( )对数据进行劫持结合发布订阅模式的方式来实现的。 vue3 中使⽤了 ES6的Proxy代理对象&#xff0c;通过 reactive() 函数给每⼀个对象都包⼀层Proxy&#xff0c;通过 Proxy监听属…...

已解决ApplicationException异常的正确解决方法,亲测有效!!!

已解决ApplicationException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查业务逻辑 验证输入数据 确认服务器端资源的可用性 增加对特殊业务情况的处理…...

「前端+鸿蒙」鸿蒙应用开发-常用UI组件-图片-参数

在鸿蒙应用开发中,图片组件是展示图像的关键UI元素。以下是详细介绍图片组件的三个主要参数:图片尺寸、图片缩放和图片插值,并提供相应的示例代码。 图片尺寸 图片尺寸指的是图片组件在界面上显示的宽度和高度。你可以使用像素(px)或其他单位来指定尺寸。 width: 设置图片…...

Tobii Pro Lab 1.232是全球领先的眼动追踪研究实验软件

Tobii Pro Lab是全球领先的眼动追踪研究实验软件。软件功能强大且拥有友好的用户界面&#xff0c;使眼动追踪研究变得更加简单、高效。该软件提供了很高的灵活性&#xff0c;可运行高级实验&#xff0c;深入了解注意力和认知过程。 获取软件安装包以及永久授权联系邮箱:289535…...

【flink实战】flink-connector-mysql-cdc导致mysql连接器报类型转换错误

文章目录 一. 报错现象二. 方案二&#xff1a;重新编译打包flink-connector-cdc1. 排查脚本2. 重新编译打包flink-sql-connector-mysql-cdc-2.4.0.jar3. 测试flink环境 三. 方案一&#xff1a;改造flink连接器 一. 报错现象 flink sql任务是&#xff1a;mysql到hdfs的离线任务&…...

【Linux】系统文件IO·文件描述符fd

前言 C语言文件接口 C 语言读写文件 1.C语言写入文件 2.C语言读取文件 stdin/stdout/stderr 系统文件IO 文件描述符fd&#xff1a; 文件描述符分配规则&#xff1a; 文件描述符fd&#xff1a; 前言 我们早在C语言中学习关于如何用代码来管理文件&#xff0c;比如文件的…...

【计算机网络篇】数据链路层(6)共享式以太网_网络适配器_MAC地址

文章目录 &#x1f354;网络适配器&#x1f354;MAC地址&#x1f5d2;️IEEE 802局域网的MAC地址格式&#x1f4d2;IEEE 802局域网的MAC地址发送顺序&#x1f95a;单播MAC地址&#x1f95a;广播MAC地址&#x1f95a;多播MAC地址&#x1f50e;小结 &#x1f354;网络适配器 要将…...

导入别人的net文件报红问题sdk

1. 使用cmd命令 dotnet --info 查看自己使用的SDK版本 2.直接找到项目中的 global.json 文件&#xff0c;右键打开&#xff0c;直接修改版本为本机的SDK版本&#xff0c;就可以用了...

LangChain 介绍

In recent times, you would probably have heard of many AI applications, one of them being chatpdf.com. 在最近&#xff0c;你可能听说过很多的AI应用&#xff0c;chatpdf.com就是其中的一个。 On this website, you can upload your own PDF. After uploading, you ca…...

【区分vue2和vue3下的element UI Avatar 头像组件,分别详细介绍属性,事件,方法如何使用,并举例】

在 Vue 2 的 Element UI 和 Vue 3 的 Element Plus 中&#xff0c;Avatar 头像组件可能并没有直接作为官方组件库的一部分。然而&#xff0c;为了回答你的问题&#xff0c;我将假设 Element UI 和 Element Plus 在未来的版本中可能添加了 Avatar 组件&#xff0c;或者我们将使用…...

数据分析必备:一步步教你如何用matplotlib做数据可视化(10)

1、Matplotlib 二维箭头图 箭头图将速度矢量显示为箭头&#xff0c;其中分量(u&#xff0c;v)位于点(x&#xff0c;y)。 quiver(x,y,u,v)上述命令将矢量绘制为在x和y中每个对应元素对中指定的坐标处的箭头。 参数 下表列出了quiver()函数的参数 - x - 1D或2D阵列&#xff0c;…...

Stable Diffusion部署教程,开启你的AI绘图之路

本文环境 系统&#xff1a;Ubuntu 20.04 64位 内存&#xff1a;32G 环境安装 2.1 安装GPU驱动 在英伟达官网根据显卡型号、操作系统、CUDA等查询驱动版本。官网查询链接https://www.nvidia.com/Download/index.aspx?langen-us 注意这里的CUDA版本&#xff0c;如未安装CUD…...

三生随记——诡异的牙线

在小镇的角落&#xff0c;坐落着一间古老的牙医诊所。这所诊所早已荒废多年&#xff0c;窗户上爬满了藤蔓&#xff0c;门板上的油漆斑驳脱落&#xff0c;仿佛诉说着无尽的沉寂与孤独。然而&#xff0c;在午夜时分&#xff0c;偶尔会有低沉的呻吟声从紧闭的诊所里传出&#xff0…...

批量重命名神器揭秘:一键实现文件夹随机命名,自定义长度轻松搞定!

在数字化时代&#xff0c;我们经常需要管理大量的文件夹&#xff0c;尤其是对于那些需要频繁更改或整理的文件来说&#xff0c;给它们进行批量重命名可以大大提高工作效率。然而&#xff0c;传统的重命名方法既繁琐又耗时&#xff0c;无法满足高效工作的需求。今天&#xff0c;…...

学习笔记——路由网络基础——路由转发

六、路由转发 1、最长匹配原则 最长匹配原则 是支持IP路由的设备默认的路由查找方式(事实上几乎所有支持IP路由的设备都是这种查找方式)。当路由器收到一个IP数据包时&#xff0c;会将数据包的目的IP地址与自己本地路由表中的表项进行逐位(Bit-By-Bit)的逐位查找&#xff0c;…...

Python网络安全项目开发实战,如何防命令注入

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程: Python网络安全项目开发实战_防命令注入_编程案例解析实例详解课程教程.pdf 在Python网络安全项目开发中,防止命令注入(Command Injection)是一项…...

程序员如何高效读代码?

程序员高效读代码的技巧包括以下几点&#xff1a; 明确阅读目的&#xff1a;在开始阅读代码之前&#xff0c;先明确你的阅读目的。是为了理解整个系统的架构&#xff1f;还是为了修复一个具体的bug&#xff1f;或者是为了了解某个功能是如何实现的&#xff1f;明确目的可以帮助…...

全面分析一下前端框架Angular的来龙去脉,分析angular的技术要点和难点,以及详细的语法和使用规则,底层原理-小白进阶之路

Angular 前端框架全面分析 Angular 是一个由 Google 维护的开源前端框架。它最早在 2010 年发布&#xff0c;最初版本称为 AngularJS。2016 年&#xff0c;团队发布了一个完全重写的版本&#xff0c;称为 Angular 2&#xff0c;之后的版本&#xff08;如 Angular 4、Angular 5…...

VACUUM 剖析

VACUUM 剖析 为什么需要 Vacuum MVCC MVCC&#xff1a;Multi-Version Concurrency Control&#xff0c;即多版本并发控制。 PostgreSQL 使用多版本并发控制&#xff08;MVCC&#xff09;来支持高并发的事务处理&#xff0c;同时保持数据的一致性和隔离性。MVCC 是一种用于管…...

基于LangChain框架搭建知识库

基于LangChain框架搭建知识库 说明流程1.数据加载2.数据清洗3.数据切分4.获取向量5.向量库保存到本地6.向量搜索7.汇总调用 说明 本文使用openai提供的embedding模型作为框架基础模型&#xff0c;知识库的搭建目的就是为了让大模型减少幻觉出现&#xff0c;实现起来也很简单&a…...

LeetCode 1789, 6, 138

目录 1789. 员工的直属部门题目链接表要求知识点思路代码 6. Z 字形变换题目链接标签思路代码 138. 随机链表的复制题目链接标签思路代码 1789. 员工的直属部门 题目链接 1789. 员工的直属部门 表 表Employee的字段为employee_id&#xff0c;department_id和primary_flag。…...

Redis部署模式全解析:单点、主从、哨兵与集群

Redis是一个高性能的键值存储系统&#xff0c;以其丰富的数据结构和优异的读写性能而闻名。在实际应用中&#xff0c;根据业务需求的不同&#xff0c;Redis可以部署在多种模式下。本文将详细介绍Redis的四种主要部署模式&#xff1a;单点模式、主从复制模式、哨兵模式以及集群模…...

python-docx顺序读取word内容

来源How to use Python iteration to read paragraphs, tables and pictures in word&#xff1f; Issue #650 python-openxml/python-docx (github.com) from docx import Document from docx.oxml.ns import qndef iter_block_items(parent):"""生成 paren…...

kafka 集群原理设计和实现概述(一)

kafka 集群原理设计和实现概述(一) Kafka 集群的设计原理是为了实现高可用性、高吞吐量、容错性和可扩展性。以下是 Kafka 集群的设计原 理及其实现方法: 1. 分布式架构设计 Kafka 采用分布式架构,集群中的多个 Broker 共同工作,负责接收、存储和传递消息。通过将数据分布…...

three.js 第十一节 - uv坐标

// ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js // 导入tween import * as T…...

git从master分支创建分支

1. 切换到主分支或你想从哪里创建新分支 git checkout master 2. 创建并切换到新的本地分支 develop git checkout -b develop 3. 将新分支推送到远程存储库 git push origin develop 4. 设置本地 develop 分支跟踪远程 develop 分支 git branch --set-upstream-toorigi…...

Chromium 调试指南2024 Mac篇 - 准备工作 (一)

1.引言 Chromium是一个由Google主导开发的开源浏览器项目&#xff0c;它为Google Chrome浏览器提供了基础框架。Chromium不仅是研究和开发现代浏览器技术的重要平台&#xff0c;还为众多其他基于Chromium的浏览器&#xff08;如Microsoft Edge、Brave等&#xff09;提供了基础…...

vue登陆密码加密,java后端解密

前端 安装crypto-js npm install crypto-js加密 //引入crypto-js import CryptoJS from crypto-js;/** ---密码加密 start--- */ const SECRET_KEY CryptoJS.enc.Utf8.parse("a15q8f6s5s1a2v3s"); const SECRET_IV CryptoJS.enc.Utf8.parse("a3c6g5h4v9sss…...

npm 安装踩坑

1 网络正常&#xff0c;但是以前的老项目安装依赖一直卡住无法安装&#xff1f;哪怕切换成淘宝镜像 解决办法&#xff1a;切换成yarn (1) npm i yarn -g(2) yarn init(3) yarn install在安装的过程中发现&#xff1a; [2/4] Fetching packages... error marked11.1.0:…...

内容安全复习 6 - 白帽子安全漏洞挖掘披露的法律风险

文章目录 安全漏洞的法律概念界定安全漏洞特征白帽子安全漏洞挖掘面临的法律风险“白帽子”安全漏洞挖掘的风险根源“白帽子”的主体边界授权行为边界关键结论 安全漏洞的法律概念界定 可以被利用来破坏所在系统的网络或信息安全的缺陷或错误&#xff1b;被利用的网络缺陷、错…...

dp经典问题:爬楼梯

dp经典问题&#xff1a;爬楼梯 爬楼梯 三步问题。有个小孩正在上楼梯&#xff0c;楼梯有n阶台阶&#xff0c;小孩一次可以上1阶、2阶或3阶。实现一种方法&#xff0c;计算小孩有多少种上楼梯的方式。结果可能很大&#xff0c;你需要对结果模1000000007。 Step1: 识别问题 这…...

示例:推荐一个基于第三方QRCoder.Xaml封装的二维码显示控件

一、目的&#xff1a;基于第三方QRCoder.Xaml封装的二维码控件&#xff0c;为了方便WPF调用 二、效果如下 功能包括&#xff1a;背景色&#xff0c;前景色&#xff0c;中心图片设置和修改大小&#xff0c;二维码设置等 三、环境 VS2022 四、使用方式 1、安装nuget包&#xf…...

阿里云服务器618没想到这么便宜,买早了!

2年前&#xff0c;我买了个服务器&#xff0c;租用服务器&#xff08;ECS5&#xff09;和网络宽带&#xff08;1M&#xff09;&#xff0c;可以说是非常非常低的配置了。 当时5年的折扣力度最大&#xff0c;但是打完折后&#xff0c;价格依然要近3000多元。 最近看到阿里云618活…...

提升Python技能的七个函数式编程技巧

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 递归📝 结构化模式匹配📝 不变性📝 纯函数📝 高阶函数📝 函数组合📝 惰性求值⚓️ 相关链接 ⚓️📖 介绍 📖 在现代编程中,虽然Python并不是一门纯粹的函数式编程语言,但函数式编程(Funct…...

微型操作系统内核源码详解系列五(五):cm3下Pendsv切换任务上篇

系列一&#xff1a;微型操作系统内核源码详解系列一&#xff1a;rtos内核源码概论篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列二&#xff1a;微型操作系统内核源码详解系列二&#xff1a;数据结构和对象篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列…...

Django测试平台搭建学习笔记1

一安装 pip离线安装requests2.32.0所需要的依赖&#xff1a; : charset-normalizer<4,>2 (3.0.0b1) : idna<4,>2.5 (3.7) : urllib3<3,>1.21.1 (2.2.0) : certifi>2017.4.17 (2024.6.2) pip离线安装pytest8.2.0所需要的依赖&#xff1a; : iniconfig (2…...

本地离线模型搭建指南-RAG架构实现

搭建一个本地中文大语言模型&#xff08;LLM&#xff09;涉及多个关键步骤&#xff0c;从选择模型底座&#xff0c;到运行机器和框架&#xff0c;再到具体的架构实现和训练方式。以下是一个详细的指南&#xff0c;帮助你从零开始构建和运行一个中文大语言模型。 本地离线模型搭…...

【IPython 使用技巧整理】

IPython 使用技巧整理 IPython 是一个交互式 Python 解释器&#xff0c;比标准 Python 解释器提供了更加强大的功能和更友好的使用体验。它为数据科学、机器学习和科学计算提供了强大的工具&#xff0c;是 Python 开发人员不可或缺的工具之一。本文将深入探讨 IPython 的各种使…...

Mac环境下反编译apk

1、apktool 获取布局信息 对xxx.apk进行反编译&#xff0c;得到一个同名的目录&#xff0c;里面就是布局文件 #apktool d xxx.apk 2、dex2jar dex转jar dex2jar反编译 1&#xff09;将xxx.apk拷贝到dex2jar所在目录中 2&#xff09;命令行下定位到dex2jar文件夹&#x…...

snat、dnat和firewalld

目录 概述 SNAT源地址转换 DANT目的地址转换 抓包 firewalld 端口管理 概述 snat &#xff1a;源地址转换 内网——外网 内网ip转换成可以访问外网的ip 也就是内网的多个主机可以只有一个有效的公网ip地址访问外部网络 DNAT&#xff1a;目的地址转发 外部用户&#…...

线性代数基础概念:向量空间

目录 线性代数基础概念&#xff1a;向量空间 1. 向量空间的定义 2. 向量空间的性质 3. 基底和维数 4. 子空间 5. 向量空间的例子 总结 线性代数基础概念&#xff1a;向量空间 向量空间是线性代数中最基本的概念之一&#xff0c;它为我们提供了一个抽象的框架&#xff0c…...

adb shell执行定时2小时命令

在Android设备上使用adb shell来执行一个定时2小时后运行的命令并不直接支持&#xff0c;因为adb shell是即时执行shell命令的工具&#xff0c;不支持内置的定时任务功能。但是&#xff0c;你可以通过几种方法来实现类似的功能&#xff1a; 方法一&#xff1a;使用sleep命令 …...

2024年6月个人工作生活总结

title: 2024年6月个人工作生活总结 urlname: code-for-2024-06 tags: 代码积累知识总结 categories:我的程序代码 date: 2024-06-30 00:00:00 photos:gallery/tech/c2.jpg 本文为 2024年6月工作生活总结。 研发编码 编码和注释 因某些需要&#xff0c;重拾了2019年的工程代码…...

京东云备案流程图_云主机快速ICP备案_京东云服务器备案问题解答

京东云ICP备案流程&#xff0c;备案包括网站和APP备案&#xff0c;以及备案问题解答FAQ&#xff0c;阿腾云以京东云网站域名备案流程为例&#xff0c;先填写主办单位信息&#xff0c;选择网站备案或APP备案&#xff0c;申请授权码并验证&#xff0c;填写并上传主办单位详细信息…...

Wipro与西门子合作集成PAVE360软件以变革汽车软件研发

盖世汽车讯 据外媒报道,领先的技术服务与咨询公司Wipro宣布与西门子公司建立战略合作伙伴关系,将通过将西门子的PAVE360软件和数字孪生技术与Wipro的汽车工程与数字化转型功能集成,以变革汽车软件开发。PAVE360此次合作旨在解决软件定义汽车快速演进所带来的汽车软件开发日益…...

面对6大争议,为什么我认为乐道L60必成爆款?

5月15日,国际家庭日。乐道首场品牌发布会以及首款车型乐道L60正式亮相。预售价格为21.99万元,叠加“2000元抵扣6000元购车款”政策之后,实际预售价为21.59万元。我们就从这个问题出发,又分别列出了以下6个问题,同时我们也采访了蔚来创始人李斌和乐道品牌负责人艾铁成,对于…...

smart汽车焕新登场,精灵1及315.49万元起

2024年4月14日,杭州——备受瞩目的新奢智能纯电汽车品牌smart宣布,在国内市场焕新推出其明星产品系列——smart精灵#1及#3的全新版型,以更亲民的价格和更丰富的配置,满足都市消费者的个性化需求。此次焕新,smart精灵#1以“新奢灵动SUV”的全新定位亮相,推出了灵动标准版、…...

前端学习--React部分

文章目录 前端学习--React部分前言1.React简介1.1React的特点1.2引入文件1.3JSX&#x1f349;JSX简介与使用&#x1f349;JSX语法规则 1.4模块与组件&#x1f349;模块&#x1f349;组件 1.5安装开发者工具 2.React面向组件编程2.1创建组件&#x1f349;函数式组件&#x1f349…...

【数据结构:排序算法】堆排序(图文详解)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;数据结构课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f369;1.大堆和小堆 &#x1f369;2.向上调整算法建堆和向下调整算法建堆&#xff1a;…...

计算属性与监听属性

【 1 】计算属性 计算属性大致就是这样 # 1 计算属性是基于它们的依赖进行缓存的# 2 计算属性只有在它的相关依赖发生改变时才会重新求值# 3 计算属性就像Python中的property&#xff0c;可以把方法/函数伪装成属性 # 计算属性本质上是一个函数&#xff0c;它们可以通过 get…...