文章目录
-
- 一、前言
- 二、基础理论:进程与线程核心概念及区别
-
- [2.1 核心概念](#2.1 核心概念)
- [2.2 进程与线程核心区别](#2.2 进程与线程核心区别)
- [2.3 与Apache的关联](#2.3 与Apache的关联)
- 三、Apache两大MPM模块工作原理
-
- [3.1 Prefork 工作原理(纯多进程模式)](#3.1 Prefork 工作原理(纯多进程模式))
- [3.2 Worker 工作原理(进程+线程混合模式)](#3.2 Worker 工作原理(进程+线程混合模式))
- [四、CentOS7 Apache 源码编译安装(生产环境首选)](#四、CentOS7 Apache 源码编译安装(生产环境首选))
-
- [4.1 编译环境依赖安装](#4.1 编译环境依赖安装)
- 安装编译工具及依赖库
-
-
- [4.2 下载源码包(官方稳定版)](#4.2 下载源码包(官方稳定版))
-
- 切换目录
- 下载Apache源码
- 解压源码包
-
-
- [4.3 自定义编译配置](#4.3 自定义编译配置)
- [4.4 编译与安装](#4.4 编译与安装)
-
- 编译(耗时3-10分钟,取决于服务器配置)
- 安装程序
-
-
- [4.5 环境变量与系统服务配置](#4.5 环境变量与系统服务配置)
-
- 配置环境变量
- 添加系统服务
- 设置开机自启
-
-
- [4.6 验证安装](#4.6 验证安装)
- [五、Apache 完整目录详解(生产运维必记)](#五、Apache 完整目录详解(生产运维必记))
- 六、Apache配置文件详解与生产级优化
-
- [6.1 核心配置文件参数详解](#6.1 核心配置文件参数详解)
- [6.2 生产级性能优化配置](#6.2 生产级性能优化配置)
-
- 开启长连接,提升访问效率
- 超时优化,防止恶意挂起连接
- MPM并发优化(Worker模式)
-
- 七、Apache配置文件与站点目录权限规范操作
-
- [7.1 核心文件目录权限标准](#7.1 核心文件目录权限标准)
- [7.2 一键权限修复命令](#7.2 一键权限修复命令)
- 站点目录权限统一修复
-
-
- [7.3 权限安全原则](#7.3 权限安全原则)
- [八、Apache 多主机头虚拟主机配置(企业主流)](#八、Apache 多主机头虚拟主机配置(企业主流))
-
- [8.1 站点环境规划](#8.1 站点环境规划)
- [8.2 创建站点目录与首页](#8.2 创建站点目录与首页)
- [8.3 多主机头虚拟主机配置文件](#8.3 多主机头虚拟主机配置文件)
-
- 开启主机头匹配功能
- 第一个虚拟主机
- 第二个虚拟主机
-
-
- [8.4 配置校验与生效](#8.4 配置校验与生效)
- [8.5 测试方式](#8.5 测试方式)
- [九、Apache Rewrite 地址重写规则超详细讲解](#九、Apache Rewrite 地址重写规则超详细讲解)
-
- [9.1 开启重写模块](#9.1 开启重写模块)
-
- 查看模块是否加载
-
-
- [9.2 核心语法规则](#9.2 核心语法规则)
- [9.3 常用标记含义](#9.3 常用标记含义)
- [9.4 企业常用实战案例](#9.4 企业常用实战案例)
- [9.6 企业级 Rewrite 通用模板](#9.6 企业级 Rewrite 通用模板)
- [9.5 防盗链、禁止IP访问规则专属报错排查方法](#9.5 防盗链、禁止IP访问规则专属报错排查方法)
-
- 校验Rewrite规则语法
- 实时查看Apache错误日志,定位规则报错
- 查看rewrite模块是否正常加载
【云计算学习之路】企业常用服务搭建:构建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经典默认模式,完全基于多进程处理请求,不使用线程,兼容性极强、稳定性极高。
工作机制:
- Apache启动后,会生成1个主管理进程,负责监控、管理子进程,不处理用户请求。
- 主进程预先派生多个空闲子进程,每个子进程独立监听80端口,单个子进程同一时间仅处理1个用户请求。
- 当请求涌入时,空闲子进程直接接管请求,无空闲进程时主进程自动新建子进程。
- 请求处理完成后,子进程不销毁,回归空闲状态,等待下一次请求复用。
优缺点:
- 优点:进程隔离性强,单个请求异常不会影响其他连接,适配PHP非线程安全模块,兼容性拉满。
- 缺点:进程资源开销大,高并发场景下占用内存极高,并发上限低。
3.2 Worker 工作原理(进程+线程混合模式)
Worker模式是多进程+多线程混合模型,结合进程稳定性和线程高并发优势,专为高并发场景设计。
工作机制:
- 服务启动后生成1个主管理进程,负责管理工作进程。
- 主进程派生若干工作子进程,每个工作子进程内部创建固定数量的服务线程。
- 线程为最小处理单元,单个线程处理1个用户请求,同一进程内所有线程共享进程资源。
- 请求量大时,自动扩容线程数或工作进程数;空闲时自动回收资源,节省服务器开销。
优缺点:
- 优点:线程轻量、内存占用低、并发承载能力远高于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 站点环境规划
- 站点A:www.web1.com 根目录:/var/www/web1
- 站点B:www.web2.com 根目录:/var/www/web2
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部署、优化、排障工作。