【云计算学习之路】企业常用服务搭建:构建Apache WEB服务器

文章目录

【云计算学习之路】企业常用服务搭建:构建Apache WEB服务器完整高阶教程

一、前言

在云计算运维、Web架构开发、服务器运维领域,Apache HTTPD是老牌、稳定、企业级应用最广泛的Web服务程序。绝大多数新手仅掌握YUM快速搭建Apache,但企业生产环境中,需要掌握进程线程底层原理、MPM工作模式、源码编译部署、权限规范、配置优化、地址重写、高级虚拟主机等高阶能力。

本文基于CentOS 7系统,从零到高阶全方位讲解Apache,包含理论底层+手工源码编译+生产级优化+故障规范,彻底吃透Apache Web服务核心技术,为后续Nginx、负载均衡、LNMP架构、微服务网关学习筑牢基础。


二、基础理论:进程与线程核心概念及区别

Apache的并发处理能力完全依赖进程、线程调度机制,理解二者区别是掌握Prefork、Worker工作模式的前置基础。

2.1 核心概念

进程(Process):操作系统资源分配的最小单位,是程序的一次独立运行过程。每个进程拥有独立的内存空间、CPU资源、文件描述符,进程之间相互隔离、互不干扰,创建和销毁开销极大。

线程(Thread):操作系统CPU调度的最小单位,隶属于进程,一个进程可包含多个线程。同一进程内的所有线程共享进程内存、文件资源,线程创建、切换、销毁开销极小,并发效率更高。

2.2 进程与线程核心区别

  • 资源隔离性:进程完全独立隔离;线程共享所属进程资源,仅私有少量栈资源。
  • 开销成本:进程创建销毁开销大、CPU调度慢;线程轻量、开销极低、并发性能更强。
  • 稳定性:单个进程崩溃不影响其他进程;单个线程异常崩溃,会导致所属整体进程终止。
  • 通信方式:进程间通信复杂(管道、socket、信号量);线程间可直接共享数据通信。
  • 适用场景:进程适合高稳定、隔离性要求高的场景;线程适合高并发、资源密集型场景。

2.3 与Apache的关联

Apache两大经典MPM(多处理模块)Prefork(多进程模型)、Worker(进程+线程混合模型),正是基于进程、线程的特性差异设计,适配不同生产场景。


三、Apache两大MPM模块工作原理

MPM(Multi-Processing Module,多处理模块)是Apache核心并发调度模块,决定服务器如何处理用户请求,CentOS7 Apache 2.4默认支持Prefork、Worker两种主流模式。

3.1 Prefork 工作原理(纯多进程模式)

Prefork是Apache经典默认模式,完全基于多进程处理请求,不使用线程,兼容性极强、稳定性极高。

工作机制:

  1. Apache启动后,会生成1个主管理进程,负责监控、管理子进程,不处理用户请求。
  2. 主进程预先派生多个空闲子进程,每个子进程独立监听80端口,单个子进程同一时间仅处理1个用户请求。
  3. 当请求涌入时,空闲子进程直接接管请求,无空闲进程时主进程自动新建子进程。
  4. 请求处理完成后,子进程不销毁,回归空闲状态,等待下一次请求复用。
    优缺点:
  • 优点:进程隔离性强,单个请求异常不会影响其他连接,适配PHP非线程安全模块,兼容性拉满。
  • 缺点:进程资源开销大,高并发场景下占用内存极高,并发上限低。

3.2 Worker 工作原理(进程+线程混合模式)

Worker模式是多进程+多线程混合模型,结合进程稳定性和线程高并发优势,专为高并发场景设计。

工作机制:

  1. 服务启动后生成1个主管理进程,负责管理工作进程。
  2. 主进程派生若干工作子进程,每个工作子进程内部创建固定数量的服务线程。
  3. 线程为最小处理单元,单个线程处理1个用户请求,同一进程内所有线程共享进程资源。
  4. 请求量大时,自动扩容线程数或工作进程数;空闲时自动回收资源,节省服务器开销。
    优缺点:
  • 优点:线程轻量、内存占用低、并发承载能力远高于Prefork,适合高流量站点。
  • 缺点:线程共享进程资源,单个线程异常可能导致整个进程崩溃,对程序线程安全性要求高。

四、CentOS7 Apache 源码编译安装(生产环境首选)

YUM安装为简化版本,功能受限、无法自定义参数、不便于版本升级。生产环境推荐源码编译安装,可自定义安装路径、开启指定模块、优化编译参数、适配业务需求。

4.1 编译环境依赖安装

安装编译工具及依赖库

bash 复制代码
yum -y install gcc gcc-c++ make autoconf automake libtool expat-devel pcre-devel zlib-devel

4.2 下载源码包(官方稳定版)

切换目录

bash 复制代码
cd /usr/local/src

下载Apache源码

bash 复制代码
wget https://archive.apache.org/dist/httpd/httpd-2.4.57.tar.gz

解压源码包

bash 复制代码
tar -zxvf httpd-2.4.57.tar.gz
cd httpd-2.4.57

4.3 自定义编译配置

bash 复制代码
./configure \
--prefix=/usr/local/httpd \
--with-mpm=worker \
--enable-ssl \
--enable-rewrite \
--enable-modules=most \
--enable-mime-magic \
--with-pcre
参数说明:
- --prefix:指定Apache安装路径
- --with-mpm=worker:默认启用worker高并发模式
- --enable-ssl:开启HTTPS加密模块
- --enable-rewrite:开启地址重写模块(核心必备)
- --enable-modules=most:启用大部分常用模块

4.4 编译与安装

编译(耗时3-10分钟,取决于服务器配置)

make

安装程序

make install

4.5 环境变量与系统服务配置

配置环境变量

bash 复制代码
echo 'export PATH=$PATH:/usr/local/httpd/bin' >> /etc/profile
source /etc/profile

添加系统服务

bash 复制代码
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
chmod +x /etc/init.d/httpd

设置开机自启

bash 复制代码
chkconfig --add httpd
chkconfig httpd on

4.6 验证安装

bash 复制代码
httpd -v
systemctl start httpd
systemctl status httpd

五、Apache 完整目录详解(生产运维必记)

无论是YUM安装还是源码安装,核心目录结构是运维排障、配置优化的基础,以下为完整全量目录解析:

  • 程序根目录:/usr/local/httpd(源码)、/etc/httpd(YUM)
    Apache程序主体目录,包含配置、模块、日志、二进制文件。
  • 主配置文件:conf/httpd.conf
    全局核心配置文件,控制服务整体运行参数。
  • 扩展配置目录:conf.d/
    所有自定义配置、虚拟主机、重写规则、模块配置统一存放,不修改主配置文件,方便管理。
  • 站点默认根目录:htdocs/(源码)、/var/www/html(YUM)
    默认网页程序存放目录,默认首页index.html。
  • 模块目录:modules/
    存放Apache所有功能模块(ssl、rewrite、mime等),动态加载依赖此目录。
  • 日志目录:logs/
    access_log(访问日志)、error_log(错误日志),是排障、流量分析核心依据。
  • 二进制命令目录:bin/
    包含httpd、apachectl、htpasswd等核心运维命令。
  • CGI程序目录:cgi-bin/
    存放CGI动态脚本程序,用于动态网页交互。

六、Apache配置文件详解与生产级优化

6.1 核心配置文件参数详解

打开主配置文件 vi /usr/local/httpd/conf/httpd.conf,核心参数逐一解析:

txt 复制代码
- ServerRoot:			服务程序根目录,指定Apache运行根路径。
- Listen 80:			监听端口,可修改为自定义端口,支持IP+端口精准监听。
- User/Group apache:	服务运行权限用户,禁止root运行,降低安全风险。
- ServerName:			服务器域名,用于识别主机头,解决虚拟主机冲突。
- DocumentRoot:		网站程序根目录路径,指定网页读取位置。
- DirectoryIndex index.html:	默认首页文件优先级。
- ErrorLog/CustomLog:			错误日志、访问日志路径与日志格式。
- Timeout 60:			请求超时时间,超过60s未传输完成自动断开。
- KeepAlive On:		开启长连接,同一客户端多次请求复用连接。
- MaxKeepAliveRequests 100:	单连接最大请求次数。
- KeepAliveTimeout 5:			长连接空闲超时时间。

6.2 生产级性能优化配置

针对并发、连接、资源占用进行优化,适配生产高可用场景:

开启长连接,提升访问效率

bash 复制代码
KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 3

超时优化,防止恶意挂起连接

Timeout 30

MPM并发优化(Worker模式)

bash 复制代码
<IfModule mpm_worker_module>
    StartServers        3
    MinSpareThreads     25
    MaxSpareThreads     75
    ThreadsPerChild     25
    MaxRequestWorkers   300
    MaxConnectionsPerChild 1000
</IfModule>
优化说明:
限制最大并发数、自动回收异常进程、缩短超时时间、提升连接复用率,
有效防御CC攻击、资源溢出问题。

七、Apache配置文件与站点目录权限规范操作

权限不当时Apache报错、网页403、被入侵的核心原因,以下为生产标准权限配置规范。

7.1 核心文件目录权限标准

  • 配置文件目录:chmod 755 /usr/local/httpd/conf、chmod 644 /usr/local/httpd/conf/*
  • 站点根目录:chmod 755 /var/www/site*(目录执行权限,保证可访问)
  • 网页文件:chmod 644 *.html *.php(禁止文件写入执行权限)
  • 属主属组:全部归属apache用户,保证服务正常读取

7.2 一键权限修复命令

站点目录权限统一修复

bash 复制代码
chown -R apache:apache /var/www/*
chmod -R 755 /var/www/*
find /var/www/ -type f -exec chmod 644 {} ;

7.3 权限安全原则

遵循最小权限原则:目录仅保留访问执行权限,文件仅保留读取权限,禁止777权限,防止木马写入、权限越权漏洞。


八、Apache 多主机头虚拟主机配置(企业主流)

多主机头虚拟主机是企业最常用的部署方式,单IP、单端口,通过不同域名区分不同网站,最大化利用服务器资源,替代传统多IP虚拟主机。

8.1 站点环境规划

8.2 创建站点目录与首页

bash 复制代码
mkdir -p /var/www/web1 /var/www/web2
echo "<h1>web1站点部署成功</h1>" > /var/www/web1/index.html
echo "<h1>web2站点部署成功</h1>" > /var/www/web2/index.html
chown -R apache:apache /var/www/*

8.3 多主机头虚拟主机配置文件

创建独立配置文件 vi /usr/local/httpd/conf.d/vhost.conf

开启主机头匹配功能

NameVirtualHost *:80

第一个虚拟主机

bash 复制代码
<VirtualHost *:80>
    ServerAdmin admin@web1.com
    ServerName www.web1.com
    DocumentRoot /var/www/web1
    ErrorLog /usr/local/httpd/logs/web1_error.log
    CustomLog /usr/local/httpd/logs/web1_access.log combined
    <Directory /var/www/web1>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

第二个虚拟主机

bash 复制代码
<VirtualHost *:80>
    ServerAdmin admin@web2.com
    ServerName www.web2.com
    DocumentRoot /var/www/web2
    ErrorLog /usr/local/httpd/logs/web2_error.log
    CustomLog /usr/local/httpd/logs/web2_access.log combined
    <Directory /var/www/web2>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

8.4 配置校验与生效

httpd -t
systemctl restart httpd

8.5 测试方式

本地修改hosts解析,绑定服务器IP与域名,分别访问两个域名,可正常跳转对应站点,即为配置成功。


九、Apache Rewrite 地址重写规则超详细讲解

Rewrite(URL重写)是Apache核心高阶功能,常用于伪静态、域名跳转、防盗链、URL标准化、参数过滤,企业网站必备配置。

9.1 开启重写模块

确认模块开启(源码编译已开启,YUM需手动开启)

查看模块是否加载

httpd -M | grep rewrite

未加载则在主配置文件添加:LoadModule rewrite_module modules/mod_rewrite.so

9.2 核心语法规则

重写规则核心指令:RewriteEngine、RewriteRule、RewriteCond

  • RewriteEngine On/Off:开启/关闭重写功能
  • RewriteCond:重写前置条件,满足条件才执行跳转
  • RewriteRule:核心重写规则,格式:RewriteRule 匹配规则 跳转地址 [标记]

9.3 常用标记含义

  • R=301\]:永久重定向,SEO永久收录

  • L\]:匹配成功后终止后续规则

  • QSA\]:保留原有URL参数

案例1:HTTP强制跳转HTTPS
复制代码
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
案例2:不带www域名跳转www
复制代码
RewriteEngine On
RewriteCond %{HTTP_HOST} ^web1.com$
RewriteRule ^(.*)$ https://www.web1.com/$1 [R=301,L]
案例3:伪静态配置(动态URL转静态)
复制代码
RewriteEngine On
RewriteRule ^list-([0-9]+).html$ list.php?id=$1 [L]

实现访问静态后缀页面,实际跳转PHP动态接口,利于SEO优化。

9.6 企业级 Rewrite 通用模板

本模板整合前文所有Rewrite核心功能,严格按照生产优先级排序(白名单放行优先、拦截规则后置),包含:内网运维白名单、HTTPS强制跳转、域名WWW标准化、资源防盗链、禁止陌生IP/域名访问、基础伪静态,全注释、无冲突,适配绝大多数企业站点,直接修改域名即可使用。

复制代码
使用说明:
	1. 替换模板内web1.com、web2.com 为自己的业务域名;
	2.  按需增删静态资源后缀;
	3. 放入虚拟主机VirtualHost段内生效;
	4. 执行httpd -t校验后重启服务。
bash 复制代码
# ==============================================
# Apache Rewrite 企业通用
# 适配 CentOS7 源码/YUM 安装 Apache2.4
# 功能:内网放行、HTTPS跳转、域名标准化、防盗链(含爬虫白名单)、防IP访问、伪静态
# ==============================================
RewriteEngine On

# 1、【最高优先级】内网/本机IP白名单放行(运维调试专用,永不拦截)
RewriteCond %{HTTP_HOST} ^127.0.0.1$ [NC,OR]
RewriteCond %{HTTP_HOST} ^192.168.[0-9]+.[0-9]+$ [NC,OR]
RewriteCond %{HTTP_HOST} ^10.[0-9]+.[0-9]+.[0-9]+$ [NC,OR]
RewriteCond %{HTTP_HOST} ^172.(1[6-9]|2[0-9]|3[0-1]).[0-9]+.[0-9]+$ [NC]
RewriteRule ^(.*)$ - [L]

# 2、全站HTTP强制跳转HTTPS
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L,QSA]

# 3、域名标准化:裸域名跳转带www(统一SEO权重)
RewriteCond %{HTTP_HOST} ^web1.com$ [NC]
RewriteRule ^(.*)$ https://www.web1.com/$1 [R=301,L,QSA]

RewriteCond %{HTTP_HOST} ^web2.com$ [NC]
RewriteRule ^(.*)$ https://www.web2.com/$1 [R=301,L,QSA]

# 4、静态资源防盗链 + 搜索引擎爬虫白名单(核心SEO适配)
# 放行:百度、谷歌、360、搜狗、必应 主流爬虫
RewriteCond %{HTTP_REFERER} !^https?://(www.)?web1.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www.)?web2.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(.*.)?baidu.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(.*.)?google.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(.*.)?so.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(.*.)?sogou.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(.*.)?bing.com/ [NC]
# 放行空Referer本地直接访问
RewriteCond %{HTTP_REFERER} !^$
# 拦截非法盗链静态资源
RewriteRule .(jpg|jpeg|png|gif|ico|mp4|mp3|zip|rar|tar|gz|txt)$ - [F,L]

# 5、禁止陌生IP/未授权域名访问,仅放行业务域名
RewriteCond %{HTTP_HOST} !^www.web1.com$ [NC]
RewriteCond %{HTTP_HOST} !^www.web2.com$ [NC]
RewriteRule ^(.*)$ - [F,L]


# 6、基础伪静态规则(动态URL转静态URL,可按需扩展)
# 示例:list-1.html 映射 list.php?id=1
RewriteRule ^list-([0-9]+).html$ list.php?id=$1 [L,QSA]
# 示例:article-1.html 映射 article.php?id=1
RewriteRule ^article-([0-9]+).html$ article.php?id=$1 [L,QSA]
模板优先级逻辑(核心保障无冲突)
  • 一级优先级:内网IP白名单,优先放行运维地址,避免后台拦截
  • 二级优先级:协议、域名标准化跳转,统一站点访问入口
  • 三级优先级:资源防盗链,保护站点静态资源带宽
  • 四级优先级:非法访问拦截,杜绝IP、陌生域名扫描
  • 末级优先级:伪静态规则,实现URL美化
模板参数拓展说明
  • QSA\]:保留URL原有参数,适配带参数链接跳转,避免参数丢失

  • 无需伪静态可直接删除对应Rule规则,不影响整体功能

9.5 防盗链、禁止IP访问规则专属报错排查方法

一、防盗链规则常见故障与排查
  • 故障1:正常本地/本站资源访问被拦截(误拦截)
    核心原因:未配置空Referer放行、域名正则书写错误、缺失站点白名单
    解决方案:保留RewriteCond %{HTTP_REFERER} !^$放行本地直接访问;核对域名正则是否精准,不带多余符号;新增本站所有二级域名、主域名白名单。
  • 故障2:防盗链规则完全不生效,资源依旧可被盗链
    核心原因:rewrite模块未加载、规则未放在虚拟主机段、浏览器缓存未清空
    解决方案:执行httpd -M | grep rewrite确认模块加载;规则必须写入对应站点VirtualHost内;测试前强制清空浏览器缓存或无痕模式访问。
  • 故障3:配置后Apache启动报错
    核心原因:正则语法错误、标记参数书写错误、换行空格不规范
    解决方案:执行httpd -t校验语法,根据报错行数修正规则,统一规则缩进与格式。
  • 故障4:图片静态资源无法正常加载
    核心原因:资源后缀匹配不全、本地Referer识别异常
    解决方案:按需补充图片、视频、文档后缀;临时注释Referer规则测试定位问题。
二、禁止IP访问规则常见故障与排查
  • 故障1:所有域名、IP全部无法访问,全站403
    核心原因:ServerName匹配规则冲突、白名单域名书写错误、正则大小写未忽略
    解决方案:检查[NC]标记是否添加;核对白名单域名与实际访问域名完全一致;避免规则优先级冲突。
  • 故障2:IP访问依旧生效,规则不拦截
    核心原因:规则未生效、hosts本地解析缓存、主域名未加入白名单
    解决方案:重启httpd服务;清空本地hosts缓存;将所有合法访问域名全部加入规则白名单。
  • 故障3:IP访问跳转死循环(301重定向循环)
    核心原因:主域名监听配置冲突、规则重复匹配
    解决方案:校验ServerName唯一性;确保跳转目标域名已纳入白名单,避免循环匹配。
  • 故障4:内网IP访问被拦截,运维无法后台管理
    核心原因:仅放行外网域名,未放行内网IP
    解决方案:新增内网IP放行规则,单独匹配内网地址并放行访问。
三、补充:内网IP白名单放行规则(解决运维后台无法访问)

在「禁止IP直接访问、仅允许域名访问」的生产场景下,为避免运维人员通过内网IP、服务器本机IP管理调试被拦截,需单独添加内网网段白名单放行规则,优先级高于拦截规则。

完整可用配置(放行所有常见内网网段)
bash 复制代码
RewriteEngine On
# 放行服务器本机回环地址
RewriteCond %{HTTP_HOST} ^127.0.0.1$ [NC,OR]
# 放行常见内网IP段:192.168.x.x
RewriteCond %{HTTP_HOST} ^192.168.[0-9]+.[0-9]+$ [NC,OR]
# 放行10.0.0.0/8内网段
RewriteCond %{HTTP_HOST} ^10.[0-9]+.[0-9]+.[0-9]+$ [NC,OR]
# 放行172.16-31段内网地址
RewriteCond %{HTTP_HOST} ^172.(1[6-9]|2[0-9]|3[0-1]).[0-9]+.[0-9]+$ [NC]
# 匹配内网IP直接放行,不执行后续拦截规则
RewriteRule ^(.*)$ - [L]
##### 配合域名白名单 + 内网白名单 完整最终版(生产直接套用)
RewriteEngine On
# ========== 内网白名单放行(优先匹配) ==========
RewriteCond %{HTTP_HOST} ^127.0.0.1$ [NC,OR]
RewriteCond %{HTTP_HOST} ^192.168.[0-9]+.[0-9]+$ [NC,OR]
RewriteCond %{HTTP_HOST} ^10.[0-9]+.[0-9]+.[0-9]+$ [NC,OR]
RewriteCond %{HTTP_HOST} ^172.(1[6-9]|2[0-9]|3[0-1]).[0-9]+.[0-9]+$ [NC]
RewriteRule ^(.*)$ - [L]

# ========== 合法域名白名单 ==========
RewriteCond %{HTTP_HOST} !^www.web1.com$ [NC]
RewriteCond %{HTTP_HOST} !^www.web2.com$ [NC]
# 非法IP/未知域名 直接403拦截
RewriteRule ^(.*)$ - [F,L]
规则详细解析
  • OR\]:多条件或匹配,满足任意一个内网网段即放行

  • 覆盖企业99%内网环境:本机回环、192.168、10段、172私有网段
  • 完全不影响外网拦截效果:外网IP、陌生域名依旧403禁止访问
排障注意点
  • 白名单规则必须写在拦截规则前面,依靠优先级实现放行效果
  • 如果仅需放行指定单个内网IP,可直接写死规则:RewriteCond %{HTTP_HOST} ^192.168.1.100$ [NC,OR]
  • 修改后务必执行 httpd -t 校验语法,再重启服务
通用排障核心命令

校验Rewrite规则语法

httpd -t

实时查看Apache错误日志,定位规则报错

tail -f /usr/local/httpd/logs/error_log

查看rewrite模块是否正常加载

httpd -M | grep rewrite


十、常见故障排查汇总

  • 服务启动失败:执行httpd -t校验配置语法,排查端口占用、模块缺失、参数错误。
  • 网页403禁止访问:权限不足、SELinux未关闭、Directory规则拒绝访问、站点目录不存在。
  • 域名跳转异常:主机头配置冲突、Rewrite规则优先级错误、缓存未清空。
  • 高并发卡顿:MPM参数配置过小、进程线程数不足、长连接未优化。

十一、学习总结

本文完整覆盖Apache从底层理论、进程线程原理、MPM工作机制,到源码编译部署、目录配置详解、权限规范、生产优化、多主机头虚拟主机、Rewrite重写规则全维度核心知识点,彻底摆脱新手仅会一键安装的局限,达到企业运维实操水平。

Apache作为经典Web服务,其进程调度、权限控制、重写机制、虚拟主机逻辑,是后续学习Nginx、反向代理、负载均衡、Web安全防护的核心基础,熟练掌握本文内容,可独立完成企业中小型网站的Apache部署、优化、排障工作。

相关推荐
灰灰勇闯IT2 小时前
TorchAir:PyTorch 跑在昇腾NPU上的桥梁
学习·aigc
Lucky_ldy2 小时前
C语言学习:编译和链接
学习
大江东去浪淘尽千古风流人物2 小时前
【Polaris-VIO】Docker 镜像跨硬件分发的隐藏陷阱:AVX-512、-march=native 与 CPU 指令集解耦边界
运维·docker·容器·slam·vio·avx-512
十子木2 小时前
SSH 反向端口转发 (Remote Port Forwarding)
运维·ssh
chimchim662 小时前
Azure ADF(Azure Data Factory 数据工厂)学习
学习·microsoft·azure
小新同学^O^2 小时前
简单学习 --> Transformer架构
学习·架构·transformer
云边云科技_云网融合2 小时前
跨国零售企业网络升级实践:如何打通全球零售网络
人工智能·云计算
AI云原生2 小时前
远程控制软件进入协作阶段:ToDesk、向日葵、AnyDesk、RustDesk怎么选?
运维·服务器·网络·windows·docker·云原生·开源软件
java1234_小锋2 小时前
Spring Boot 的嵌入式服务器(如 Tomcat)是如何启动的?如何替换为 Jetty 或 Undertow?
服务器·spring boot·tomcat