目录
- 环境准备:确保你的系统已安装 Apache。
- 核心配置文件:了解 Apache 配置文件的位置和结构。
- 配置第一个网站(虚拟主机):这是最常用和推荐的方式。
- 常用指令详解:解释一些关键的配置项。
- 高级配置:包括重定向、目录权限等。
- 测试与重启:如何应用你的新配置。
- 故障排查:遇到问题怎么办?
环境准备:安装 Apache
如果你的系统还没有安装 Apache,可以根据你的操作系统进行安装。

对于 Debian / Ubuntu 系统:
# 更新软件包列表 sudo apt update # 安装 apache2 sudo apt install apache2 # 检查 Apache 服务状态 sudo systemctl status apache2
对于 CentOS / RHEL / Rocky Linux 系统:
# 安装 httpd (Apache 在 CentOS 上的名称) sudo yum install httpd # 启动 Apache 服务并设置为开机自启 sudo systemctl start httpd sudo systemctl enable httpd # 检查 Apache 服务状态 sudo systemctl status httpd
安装完成后,打开浏览器访问你的服务器 IP 地址(http://192.168.1.100),如果看到 "It works!" 或 Apache 的默认欢迎页面,说明安装成功。
核心配置文件
理解 Apache 的配置文件结构至关重要。

-
主配置文件:
/etc/apache2/apache2.conf(Debian/Ubuntu) 或/etc/httpd/conf/httpd.conf(CentOS/RHEL)这是 Apache 的核心配置文件,通常不建议直接修改,它通常会引入其他配置文件。
-
虚拟主机配置目录:
- Debian/Ubuntu:
/etc/apache2/sites-available/(存放可用站点配置) - CentOS/RHEL:
/etc/httpd/conf.d/(存放所有自定义配置,通常以.conf
- Debian/Ubuntu:
-
模块配置目录:
(图片来源网络,侵删)- Debian/Ubuntu:
/etc/apache2/mods-available/和/etc/apache2/mods-enabled/ - CentOS/RHEL:
/etc/httpd/conf.modules.d/
- Debian/Ubuntu:
-
网站根目录:存放网站文件的地方。
- Debian/Ubuntu:
/var/www/html/(默认站点) - CentOS/RHEL:
/var/www/html/(默认站点)
- Debian/Ubuntu:
配置第一个网站(虚拟主机)
虚拟主机允许你在同一台服务器上托管多个网站,每个网站都有独立的域名和配置,这是现代服务器配置的标准做法。
假设场景:
- 域名:
example.com - 网站根目录:
/var/www/example.com - 日志目录:
/var/log/apache2/example.com
创建网站目录和文件
# 创建网站根目录 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! Your example.com server is working!</h1>
<p>This is a test page.</p>
</body>
</html>
设置目录权限
为了让 Apache 能够读取和提供网站文件,需要设置正确的所有者。
# 将网站目录的所有者设置为 www-data (Debian/Ubuntu) 或 apache (CentOS/RHEL) # 并且将用户添加到 www-data/apache 组,方便上传文件 sudo chown -R www-data:www-data /var/www/example.com sudo chmod -R 755 /var/www/example.com
创建虚拟主机配置文件
对于 Debian / Ubuntu:
-
在
sites-available目录下创建一个新的配置文件。sudo nano /etc/apache2/sites-available/example.com.conf
-
粘贴以下配置内容:
<VirtualHost *:80> # 网站服务器的域名,可以有多个,用空格隔开 ServerName example.com ServerAlias www.example.com # 网站根目录 DocumentRoot /var/www/example.com # 定义此虚拟主机的访问日志和错误日志 ErrorLog ${APACHE_LOG_DIR}/example.com_error.log CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined <Directory /var/www/example.com> # 允许所有主机访问 Require all granted # 允许目录列表 (可选,生产环境建议关闭) # Options Indexes FollowSymLinks # 禁用目录列表 (推荐) Options -Indexes </Directory> </VirtualHost> -
启用这个新的虚拟主机配置。
# a2ensite 是一个辅助脚本,用于创建符号链接到 sites-enabled 目录 sudo a2ensite example.com.conf
-
(可选)禁用默认的欢迎页面,避免它干扰你的网站。
sudo a2dissite 000-default.conf
对于 CentOS / RHEL:
-
在
conf.d目录下创建一个新的配置文件。sudo nano /etc/httpd/conf.d/example.com.conf
-
粘贴以下配置内容(与 Ubuntu 类似,但指令略有不同):
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com ErrorLog /var/log/httpd/example.com_error.log CustomLog /var/log/httpd/example.com_access.log combined <Directory /var/www/example.com> # 允许所有主机访问 Require all granted # 禁用目录列表 Options -Indexes </Directory> </VirtualHost>
在 CentOS/RHEL 上,只要把文件放在 conf.d 目录下并以 .conf Apache 就会自动加载它,无需额外命令。
常用指令详解
<VirtualHost *:80>: 定义一个虚拟主机,监听所有网络接口的 80 端口(HTTP)。ServerName: 主域名,用于匹配用户请求的域名。ServerAlias: 域名别名,比如带www的版本。DocumentRoot: 网站文件存放的根目录。ErrorLog: 存放服务器错误信息的日志文件。CustomLog: 存放访问日志,combined是一个常用的日志格式,包含客户端IP、访问时间、请求方法、URL、协议状态码等。<Directory ...>: 对特定目录设置访问权限。Require all granted: 允许所有客户端访问该目录。Options: 控制目录的特性。Indexes: 如果目录下没有index.html,则显示文件列表(安全风险,建议关闭)。FollowSymLinks: 允许使用符号链接。-Indexes: 禁用文件列表。
高级配置
A. 设置 HTTPS (使用 Let's Encrypt)
现代网站必须使用 HTTPS,推荐使用 certbot 工具自动获取和配置 Let's Encrypt 证书。
-
安装 Certbot
# Ubuntu/Debian sudo apt install certbot python3-certbot-apache # CentOS/RHEL sudo yum install certbot python3-certbot-apache
-
获取证书并自动配置
# Certbot 会自动检测你的 ServerName,获取证书并修改 Apache 配置 sudo certbot --apache -d example.com -d www.example.com
按照提示操作,它会自动:
- 检查域名所有权。
- 下载 SSL 证书。
- 修改你的虚拟主机配置,添加 443 端口的监听和 SSL 相关指令。
- (可选)设置 HTTP 请求自动重定向到 HTTPS。
B. 设置重定向(如 HTTP 到 HTTPS)
Certbot 通常会自动帮你完成这个配置,如果需要手动设置,可以在 <VirtualHost *:80> 部分添加以下指令:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
# 将所有 HTTP 请求永久重定向到 HTTPS
Redirect permanent / https://example.com/
</VirtualHost>
C. 设置用户目录(个人主页)
允许用户通过 http://yourserver/~username 访问其个人主页。
-
启用
userdir模块# Ubuntu/Debian sudo a2enmod userdir # CentOS/RHEL # 编辑 /etc/httpd/conf.d/userdir.conf,确保 UserDir disabled 被注释掉,UserDir public_html 存在
-
创建用户目录
# 为用户 'testuser' 创建个人主页目录 sudo mkdir -p /home/testuser/public_html sudo chown testuser:testuser /home/testuser/public_html sudo chmod 755 /home/testuser /home/testuser/public_html # 在 public_html 下放一个 index.html 文件 echo "Welcome to testuser's homepage!" > /home/testuser/public_html/index.html
-
修改主配置文件 在
apache2.conf或httpd.conf中,找到<Directory /home/*/public_html>部分,确保权限设置正确。
测试与重启
每次修改配置文件后,都需要让 Apache 重新加载配置以使其生效。
-
检查配置文件语法 在重启之前,先检查语法是否有误,这可以避免服务器意外宕机。
# Ubuntu/Debian sudo apache2ctl configtest # CentOS/RHEL sudo apachectl configtest
如果看到
Syntax OK,说明语法正确。 -
优雅重启 优雅重启会平滑地应用新配置,不会中断现有的连接。
# Ubuntu/Debian sudo systemctl reload apache2 # CentOS/RHEL sudo systemctl reload httpd
-
完全重启 如果遇到问题,可以尝试完全重启服务。
# Ubuntu/Debian sudo systemctl restart apache2 # CentOS/RHEL sudo systemctl restart httpd
故障排查
-
问题1:访问网站时显示 "403 Forbidden"
- 原因:通常是文件或目录权限不正确。
- 解决:确保网站根目录的所有者是
www-data或apache,并且权限是755,确保文件权限是644。sudo chown -R www-data:www-data /var/www/example.com sudo chmod -R 755 /var/www/example.com find /var/www/example.com -type f -exec chmod 644 {} \;
-
问题2:访问网站时显示 "404 Not Found"
- 原因:
DocumentRoot路径错误,或者index.html文件不存在。 - 解决:检查
<VirtualHost>配置中的DocumentRoot是否与实际目录一致,并确保该目录下有默认首页文件。
- 原因:
-
问题3:访问 IP 地址时显示的不是我配置的网站
- 原因:Apache 的默认站点配置仍然生效。
- 解决:确保你已经禁用了默认站点(
000-default.conf),并且你的虚拟主机配置文件已正确启用(在 Ubuntu 上使用a2ensite)。
-
问题4:DNS 或浏览器缓存问题
- 原因:你的电脑可能还缓存了旧的 IP 地址或域名解析结果。
- 解决:尝试清除浏览器缓存,或者使用
ping命令检查域名是否解析到了正确的服务器 IP。
希望这份详细的指南能帮助你成功配置你的 Apache 网站!
