下面以 Ubuntu / Debian 上的 Apache2 为例,介绍常见的 多站点(VirtualHost)配置方法,适用于一台服务器托管多个域名或子站点。
Apache 通过 虚拟主机(VirtualHost) 实现多站点:
ServerName(域名)区分常见路径:
/etc/apache2/
├── sites-available/ # 可用站点配置
├── sites-enabled/ # 已启用站点(软链接)
├── ports.conf # 端口配置
sudo mkdir -p /var/www/site1
sudo mkdir -p /var/www/site2
echo "site1" | sudo tee /var/www/site1/index.html
echo "site2" | sudo tee /var/www/site2/index.html
sudo nano /etc/apache2/sites-available/site1.conf
内容:
<VirtualHost *:80>
ServerName site1.com
ServerAlias www.site1.com
DocumentRoot /var/www/site1
<Directory /var/www/site1>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/site1_error.log
CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>
sudo nano /etc/apache2/sites-available/site2.conf
内容类似,仅改:
ServerName site2.com
DocumentRoot /var/www/site2
sudo a2ensite site1.conf
sudo a2ensite site2.conf
禁用默认站点(可选):
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
修改本地 hosts:
sudo nano /etc/hosts
添加:
127.0.0.1 site1.com
127.0.0.1 site2.com
浏览器访问:
http://site1.com
http://site2.com
修改 ports.conf:
Listen 8080
站点配置:
<VirtualHost *:8080>
DocumentRoot /var/www/site2
</VirtualHost>
*:443 + SSLCertificateFile示例:
<VirtualHost *:443>
ServerName site1.com
DocumentRoot /var/www/site1
SSLEngine on
SSLCertificateFile /etc/ssl/site1.crt
SSLCertificateKeyFile /etc/ssl/site1.key
</VirtualHost>
启用模块:
sudo a2enmod ssl
✅ 访问错站 → ServerName 写错
✅ 403 → 目录权限 / Require all granted
✅ 不生效 → 没 a2ensite 或没 reload
如果你用的是 CentOS / Rocky / Alma 或 Docker Apache,或想要 WordPress 多站点 / 子域名方案,告诉我我可以给你对应配置。