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语言编写。
主要特点
- 轻量级:Nginx设计简洁,占用内存少,能在相同的硬件条件下提供更高的服务能力。
- 高性能:Nginx通过其事件驱动、异步非阻塞的架构设计,能够高效地处理大量并发连接,对于静态文件请求效率极高。使用epoll(Linux平台)或kqueue(类BSD系统)等高效的I/O多路复用技术来监听和管理连接。
- 进程模型:采用“主从”多进程模式,其中master进程负责管理和配置更新,而worker进程负责实际的请求处理,这种设计支持热部署和故障恢复。
优势
- 并发性能:Nginx在处理大量并发连接时表现出色,特别是在静态内容处理方面。据称,Nginx可以支持对5万个并发连接数的响应,而只占用很低的内存资源。
- 稳定性:Nginx采用了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx官方表示,Nginx保持1万个没有活动的连接,而这些连接只占用2.5MB内存。
- 高可用性: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/24 | 192.168.110.10/24 | 192.168.120.10/24 |
软件包 | httpd.x86_64 | ||
账户信息 | root@Server | root@company1 | root@company2 |
主要配置信息
- 服务端软件包: httpd.x86_64
- 主配置文件:/etc/httpd/conf/httpd.conf
- 服务名:httpd.service
- 端口号:TCP/80、TCP/443
二、Apache服务配置信息
1、主配置书写格式
查看主配置文件
cat /etc/httpd/conf/httpd.conf
在Apache中的配置文件共分为三种类型:
-
全局配置(在整个服务器生效)
-
块级配置(仅在当前块内生效)
-
虚拟主机配置
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服务,也称为Apache HTTP Server,是一个功能强大且广泛使用的Web服务器软件。 起源和背景 Apache起源于NCSA httpd服务器,经过多次修改和发展,逐渐成为世界上最流行的Web服务器软件之一。…...
API-事件监听
学习目标: 掌握事件监听 学习内容: 事件监听拓展阅读-事件监听版本 事件监听: 什么是事件? 事件是在编程时系统内发生的动作或者发生的事情。 比如用户在网页上单击一个按钮。什么是事件监听? 就是让程序检测是否有事…...

如何为自己的项目生成changelog
背景 在github上看到人家的更新日志感觉很cool,怎么能给自己项目来一套呢 环境信息 tdstdsdeMacBook-Pro demo-doc % node -v v14.18.1 tdstdsdeMacBook-Pro demo-doc % npm -v 6.14.15硬件信息 型号名称:MacBook Pro版本: 12.6.9芯片&…...
MySQL之表碎片化
文章目录 1. 前言2. InnoDB表碎片3. 清除表碎片3.1 查找碎片化严重的表3.2 清除碎片 4. 小结5. 参考 1. 前言 周一在对线上表进行数据清除时,发现一个问题,我要清除的单表大概有2500w条数据,清除数据大概在1300w条左右,清除之前通…...

碳+绿证如何能源匹配?考虑碳交易和绿证交易制度的电力批发市场能源优化程序代码!
前言 近年来,面对日益受到全社会关注的气候变化问题,国外尤其是欧美等发达国家和地区针对电力行业制定了一系列碳减排组合机制。其中,碳排放权交易(以下简称“碳交易”)和绿色电力证书交易(以下简称“绿证…...

【原创】springboot+mysql海鲜商城设计与实现
个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…...

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

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

win32API(CONSOLE 相关接口详解)
前言: Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外,它同时也是⼀个很⼤的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程式达到开启视窗、描绘图形…...

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

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

100多个ChatGPT指令提示词分享
当前,ChatGPT几乎已经占领了整个互联网。全球范围内成千上万的用户正使用这款人工智能驱动的聊天机器人来满足各种需求。然而,并不是每个人都知道如何充分有效地利用ChatGPT的潜力。其实有许多令人惊叹的ChatGPT指令提示词,可以提升您与ChatG…...
vue2和vue3数据代理的区别
前言: vue2 的双向数据绑定是利⽤ES5的⼀个 API ,Object.defineProperty( )对数据进行劫持结合发布订阅模式的方式来实现的。 vue3 中使⽤了 ES6的Proxy代理对象,通过 reactive() 函数给每⼀个对象都包⼀层Proxy,通过 Proxy监听属…...

已解决ApplicationException异常的正确解决方法,亲测有效!!!
已解决ApplicationException异常的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查业务逻辑 验证输入数据 确认服务器端资源的可用性 增加对特殊业务情况的处理…...
「前端+鸿蒙」鸿蒙应用开发-常用UI组件-图片-参数
在鸿蒙应用开发中,图片组件是展示图像的关键UI元素。以下是详细介绍图片组件的三个主要参数:图片尺寸、图片缩放和图片插值,并提供相应的示例代码。 图片尺寸 图片尺寸指的是图片组件在界面上显示的宽度和高度。你可以使用像素(px)或其他单位来指定尺寸。 width: 设置图片…...

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

【flink实战】flink-connector-mysql-cdc导致mysql连接器报类型转换错误
文章目录 一. 报错现象二. 方案二:重新编译打包flink-connector-cdc1. 排查脚本2. 重新编译打包flink-sql-connector-mysql-cdc-2.4.0.jar3. 测试flink环境 三. 方案一:改造flink连接器 一. 报错现象 flink sql任务是:mysql到hdfs的离线任务&…...

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

【计算机网络篇】数据链路层(6)共享式以太网_网络适配器_MAC地址
文章目录 🍔网络适配器🍔MAC地址🗒️IEEE 802局域网的MAC地址格式📒IEEE 802局域网的MAC地址发送顺序🥚单播MAC地址🥚广播MAC地址🥚多播MAC地址🔎小结 🍔网络适配器 要将…...

导入别人的net文件报红问题sdk
1. 使用cmd命令 dotnet --info 查看自己使用的SDK版本 2.直接找到项目中的 global.json 文件,右键打开,直接修改版本为本机的SDK版本,就可以用了...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...