目录
- Apache 简介
- 安装 Apache
- 核心配置文件结构
- 基础配置与管理
- 启动、停止、重启服务
- 测试配置文件语法
- 查看 Apache 状态和错误日志
- 创建第一个虚拟主机
- 什么是虚拟主机?
- 基于名称的虚拟主机配置(最常用)
- 安全配置
- 防止目录列表
- 设置文件访问权限
- 使用
.htaccess文件(需谨慎) - 配置 HTTPS (SSL/TLS)
- 性能优化
mpm_prefork与mpm_event模块- 调整
KeepAlive和MaxRequestWorkers
- 常见问题与排错
Apache 简介
Apache HTTP Server(简称 Apache)是世界上最流行的 Web 服务器软件之一,它是一个开源、跨平台、功能强大的 HTTP 服务器,以其稳定性、灵活性和可扩展性而闻名。

安装 Apache
对于 Ubuntu/Debian 系统
使用 apt 包管理器进行安装:
# 更新软件包列表 sudo apt update # 安装 apache2 sudo apt install apache2 # 检查服务状态 sudo systemctl status apache2
安装完成后,你可以通过服务器的 IP 地址或域名在浏览器中访问,应该能看到 Apache 的默认欢迎页面。
对于 CentOS/RHEL 系统
使用 yum 或 dnf 包管理器进行安装(CentOS 7/8+ 使用 dnf):
# CentOS 7/8+ sudo dnf install httpd # CentOS 7 也可以使用 yum # sudo yum install httpd # 启动 httpd 服务并设置开机自启 sudo systemctl start httpd sudo systemctl enable httpd # 检查服务状态 sudo systemctl status httpd
对于 CentOS/RHEL,你可能需要配置防火墙以允许 HTTP (80) 和 HTTPS (443) 端口:

# 永久允许 HTTP 和 HTTPS 流量 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https # 重新加载防火墙配置 sudo firewall-cmd --reload
核心配置文件结构
理解配置文件的结构是管理 Apache 的关键。
-
主配置文件:
- Ubuntu/Debian:
/etc/apache2/apache2.conf - CentOS/RHEL:
/etc/httpd/conf/httpd.conf这个文件是 Apache 的核心,它加载模块、设置全局指令,并包含其他配置文件。
- Ubuntu/Debian:
-
站点可用/禁用目录:
- Ubuntu/Debian:
/etc/apache2/sites-available/和/etc/apache2/sites-enabled/- 网站的配置文件放在
sites-available目录下。 - 使用
a2ensite命令创建一个从sites-available到sites-enabled的符号链接来启用站点。 - 使用
a2dissite命令来禁用站点。
- 网站的配置文件放在
- CentOS/RHEL:
/etc/httpd/conf.d/- 每个虚拟主机通常都有一个独立的
.conf文件(my-site.conf),只要文件名以.confApache 就会自动加载它。
- 每个虚拟主机通常都有一个独立的
- Ubuntu/Debian:
-
模块目录:
(图片来源网络,侵删)- Ubuntu/Debian:
/etc/apache2/mods-available/和/etc/apache2/mods-enabled/- 类似于站点,模块也通过
a2enmod和a2dismod命令来启用和禁用。
- 类似于站点,模块也通过
- CentOS/RHEL:
/etc/httpd/conf.modules.d/- 模块配置通常在这里,主配置文件
httpd.conf会通过LoadModule指令加载它们。
- 模块配置通常在这里,主配置文件
- Ubuntu/Debian:
-
Web 根目录:
- Ubuntu/Debian:
/var/www/html/ - CentOS/RHEL:
/var/www/html/这是存放网站默认主页(如index.html)的地方。
- Ubuntu/Debian:
-
日志文件目录:
- Ubuntu/Debian:
/var/log/apache2/ - CentOS/RHEL:
/var/log/httpd/access.log: 记录所有客户端的访问请求。error.log: 记录服务器错误和警告信息。
- Ubuntu/Debian:
基础配置与管理
启动、停止、重启服务
-
Ubuntu/Debian:
sudo systemctl start apache2 # 启动 sudo systemctl stop apache2 # 停止 sudo systemctl restart apache2 # 重启 (应用配置更改) sudo systemctl reload apache2 # 优雅重载 (不中断现有连接)
-
CentOS/RHEL:
sudo systemctl start httpd # 启动 sudo systemctl stop httpd # 停止 sudo systemctl restart httpd # 重启 sudo systemctl reload httpd # 优雅重载
测试配置文件语法
在修改配置文件后,务必先测试语法是否正确,再重启服务。
-
Ubuntu/Debian:
sudo apache2ctl configtest # 或者 sudo apachectl configtest
如果语法正确,输出会是
Syntax OK。 -
CentOS/RHEL:
sudo apachectl configtest
如果语法正确,输出会是
Syntax OK。
查看日志
当网站出现问题时,日志是最好的朋友。
-
查看错误日志:
# Ubuntu/Debian sudo tail -f /var/log/apache2/error.log # CentOS/RHEL sudo tail -f /var/log/httpd/error.log
tail -f可以实时查看日志的更新,非常适合排错。
创建第一个虚拟主机
虚拟主机允许你在同一台服务器上托管多个网站,每个域名都指向其独立的配置和目录。
我们以 example.com 为例,为其创建一个虚拟主机。
步骤 1: 创建网站目录
# 创建网站根目录 sudo mkdir -p /var/www/example.com # 创建一个简单的 index.html 文件 sudo nano /var/www/example.com/index.html
在 index.html 中输入以下内容:
<!DOCTYPE html>
<html>
<head>Welcome to example.com!</title>
</head>
<body>
<h1>Success! The example.com virtual host is working!</h1>
</body>
</html>
步骤 2: 设置目录权限
确保 Apache 用户可以读取这些文件。
-
Ubuntu/Debian:
# www-data 是 Ubuntu/Debian 上的 Apache 运行用户 sudo chown -R www-data:www-data /var/www/example.com sudo chmod -R 755 /var/www/example.com
-
CentOS/RHEL:
# apache 是 CentOS/RHEL 上的 Apache 运行用户 sudo chown -R apache:apache /var/www/example.com sudo chmod -R 755 /var/www/example.com
步骤 3: 创建虚拟主机配置文件
-
对于 Ubuntu/Debian:
sudo nano /etc/apache2/sites-available/example.com.conf
-
对于 CentOS/RHEL:
sudo nano /etc/httpd/conf.d/example.com.conf
粘贴到文件中,并根据你的实际情况修改
ServerName和DocumentRoot:
<VirtualHost *:80>
# 网站域名和可能的别名
ServerName example.com
ServerAlias www.example.com
# 网站根目录
DocumentRoot /var/www/example.com
# 定义错误日志和访问日志
ErrorLog ${APACHE_LOG_DIR}/error_example.com.log
CustomLog ${APACHE_LOG_DIR}/access_example.com.log combined
<Directory /var/www/example.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory> 