Apache如何添加多个网站并配置虚拟主机?
- 主机动态
- 2025-10-26
- 4902
在服务器管理中,使用Apache服务器托管多个网站是一项常见需求,无论是为不同部门、客户还是个人项目提供服务,合理配置多站点环境都能提高服务器资源利用率和管理效率,本文将详细介绍如何在Apache服务器上添加多个网站,涵盖准备工作、虚拟主机配置、SSL证书设置及常见问题解决等关键环节,帮助读者构建稳定、安全的多站点环境。
准备工作:环境检查与依赖安装
在开始配置多站点前,需确保服务器已满足基本条件,确认Apache已正确安装并运行,可通过systemctl status apache2(Ubuntu/Debian)或systemctl status httpd(CentOS/Rocky Linux)命令检查服务状态,若未安装,可使用包管理器进行安装,例如在Ubuntu系统中执行sudo apt update && sudo apt install apache2,在CentOS系统中执行sudo yum install httpd。
为每个网站准备独立的目录结构和权限,假设需要添加两个网站:site1.example.com和site2.example.com,可在/var/www/目录下创建对应文件夹,并设置正确的所有权:
sudo mkdir -p /var/www/site1.example.com /var/www/site2.example.com sudo chown -R $USER:$USER /var/www/site1.example.com /var/www/site2.example.com sudo chmod -R 755 /var/www/site1.example.com /var/www/site2.example.com
随后,为每个站点创建测试首页文件,例如在site1.example.com目录下创建index.html为:
<!DOCTYPE html> <html> <head><title>Site1 Example</title></head> <body><h1>Welcome to Site1</h1></body> </html>
虚拟主机配置:基于名称的虚拟主机
Apache支持基于IP、端口和域名的虚拟主机,其中基于域名的配置最为常见,适用于单IP多站点场景,配置文件通常位于/etc/apache2/sites-available/(Ubuntu/Debian)或/etc/httpd/conf.d/(CentOS/Rocky Linux)目录下。
创建虚拟主机配置文件
为每个网站创建独立的配置文件,例如site1.conf和site2.conf,以site1.conf如下:
<VirtualHost *:80> ServerName site1.example.com ServerAlias www.site1.example.com DocumentRoot /var/www/site1.example.com ErrorLog ${APACHE_LOG_DIR}/site1_error.log CustomLog ${APACHE_LOG_DIR}/site1_access.log combined </VirtualHost>
关键参数说明:
- ServerName:主域名,用于匹配客户端请求
- ServerAlias:备用域名,可配置多个,用空格分隔
- DocumentRoot:网站根目录路径
- ErrorLog和CustomLog:错误日志和访问日志路径
启用虚拟主机配置
在Ubuntu/Debian系统中,使用a2ensite命令启用站点:

在CentOS/Rocky Linux系统中,确保配置文件扩展名为.conf并位于/etc/httpd/conf.d/目录,Apache会自动加载。
配置本地hosts文件(测试用)
若尚未注册真实域名,可在本地机器的/etc/hosts文件中添加映射(Linux/macOS)或C:WindowsSystem32driversetchosts文件(Windows):
0.0.1 site1.example.com 127.0.0.1 site2.example.com
注意:生产环境中需通过DNS解析指向服务器IP。
重启Apache服务
执行sudo systemctl reload apache2或sudo systemctl restart httpd使配置生效,通过浏览器访问不同域名验证结果。
SSL证书配置:启用HTTPS
现代网站普遍需要HTTPS加密,可通过Let’s Encrypt免费证书实现,以下是配置步骤:
安装Certbot工具
Ubuntu/Debian系统:

CentOS/Rocky Linux系统:
sudo yum install certbot python3-certbot-apache
获取并安装证书
为每个域名单独申请证书:
sudo certbot --apache -d site1.example.com -d www.site1.example.com sudo certbot --apache -d site2.example.com -d www.site2.example.com
Certbot会自动修改虚拟主机配置,添加443端口监听和SSL相关指令,生成证书通常位于/etc/letsencrypt/live/域名/目录下。
强制HTTPS访问
在虚拟主机配置中添加以下指令,强制HTTP请求跳转至HTTPS:
<VirtualHost *:80> ServerName site1.example.com Redirect permanent / https://site1.example.com/ </VirtualHost> <VirtualHost *:443> ServerName site1.example.com DocumentRoot /var/www/site1.example.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/site1.example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/site1.example.com/privkey.pem </VirtualHost>
自动续期设置
Let’s Encrypt证书有效期为90天,可通过以下命令设置自动续期:
sudo crontab -e
添加以下行,每月执行一次续期检查:
0 0 1 * * /usr/bin/certbot renew --quiet
多站点配置管理技巧
使用模板批量创建
对于大量站点,可创建配置模板文件,通过变量替换快速生成新站点配置,创建site-template.conf:

<VirtualHost *:80> ServerName {{DOMAIN}} ServerAlias www.{{DOMAIN}} DocumentRoot /var/www/{{DOMAIN}} ErrorLog /var/log/apache2/{{DOMAIN}}_error.log CustomLog /var/log/apache2/{{DOMAIN}}_access.log combined </VirtualHost>
使用sed命令替换变量:
DOMAIN=newsite.example.com cp site-template.conf /etc/apache2/sites-available/${DOMAIN}.conf sed -i "s/{{DOMAIN}}/${DOMAIN}/g" /etc/apache2/sites-available/${DOMAIN}.conf
日志管理优化
为避免日志文件过大,可配置日志轮转(Logrotate),编辑/etc/logrotate.d/apache2文件,添加自定义站点日志规则:
/var/log/apache2/*_log { daily missingok rotate 7 compress delaycompress notifempty create 644 root root }
权限与安全隔离
不同站点应使用独立的运行用户和组,避免权限泄露,为site1.example.com创建专用用户:
sudo useradd -m -d /var/www/site1.example.com -s /bin/false site1user sudo chown -R site1user:site1user /var/www/site1.example.com
并在虚拟主机配置中指定User和Group指令:
<VirtualHost *:80> ... User site1user Group site1user </VirtualHost>
常见问题排查
域名无法访问
检查项目:
- DNS解析是否正确(使用dig 域名命令验证)
- Apache错误日志(/var/log/apache2/error_log)是否有报错
- 虚拟主机配置文件语法是否正确(sudo apache2 configtest)
- 防火墙是否放行80/443端口(sudo ufw status)
SSL证书错误
常见错误及解决方案:
- 证书不匹配:确保ServerName与证书申请域名一致
- 警告:检查网页中是否包含HTTP资源,替换为HTTPS链接
- 证书过期:手动执行sudo certbot renew测试续期功能
权限问题
若出现403 Forbidden错误,检查:
- DocumentRoot目录权限是否为755
- 网页文件权限是否为644
- SELinux状态(CentOS系统可通过getsebool -a | grep httpd检查)
通过以上步骤,即可在Apache服务器上成功配置多个网站,实现高效、安全的多站点托管,实际操作中,建议根据业务需求灵活调整配置,并定期备份关键配置文件,确保服务稳定性。