温馨提示×

如何设置apache虚拟主机

小樊
46
2026-08-31 08:32:41
栏目: 云计算

下面以 Linux(如 Ubuntu / CentOS) 环境下的 Apache 为例,介绍**设置虚拟主机(Virtual Host)**的完整流程。内容适用于 基于域名的虚拟主机(最常用)。


一、虚拟主机的作用

通过虚拟主机,可以在 一台服务器上运行多个网站,例如:

  • www.site1.com
  • www.site2.com

它们共用一个 Apache 服务,但访问不同的目录和配置。


二、前提条件

  1. 已安装 Apache

    apachectl -v
    

    如未安装:

    # Ubuntu / Debian
    sudo apt update
    sudo apt install apache2
    
    # CentOS / RHEL
    sudo yum install httpd
    
  2. 拥有域名(或本地测试用 hosts 文件模拟)


三、创建网站目录

sudo mkdir -p /var/www/site1.com/public_html
sudo mkdir -p /var/www/site2.com/public_html

设置权限:

sudo chown -R apache:apache /var/www/site1.com
sudo chown -R apache:apache /var/www/site2.com

Ubuntu 默认用户是 www-data,CentOS 是 apache


四、创建测试页面

echo "site1.com" > /var/www/site1.com/public_html/index.html
echo "site2.com" > /var/www/site2.com/public_html/index.html

五、创建虚拟主机配置文件

Ubuntu / Debian

sudo nano /etc/apache2/sites-available/site1.com.conf

CentOS / RHEL

sudo nano /etc/httpd/conf.d/site1.com.conf

示例虚拟主机配置

<VirtualHost *:80>
    ServerName site1.com
    ServerAlias www.site1.com
    DocumentRoot /var/www/site1.com/public_html

    <Directory /var/www/site1.com/public_html>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog /var/log/apache2/site1_error.log
    CustomLog /var/log/apache2/site1_access.log combined
</VirtualHost>

如果是 CentOS,日志路径改为:

ErrorLog logs/site1_error.log
CustomLog logs/site1_access.log combined

六、启用虚拟主机(Ubuntu 特有)

sudo a2ensite site1.com.conf
sudo a2ensite site2.com.conf

禁用默认站点(可选):

sudo a2dissite 000-default.conf

七、检查配置并重启 Apache

检查配置

apachectl configtest

重启 Apache

# Ubuntu
sudo systemctl restart apache2

# CentOS
sudo systemctl restart httpd

八、本地测试(无真实域名)

修改本地 hosts 文件:

sudo nano /etc/hosts

添加:

127.0.0.1 site1.com
127.0.0.1 site2.com

浏览器访问:

http://site1.com
http://site2.com

九、常见问题

1. 访问显示默认 Apache 页面

  • 虚拟主机未启用
  • ServerName 不匹配
  • 未重启 Apache

2. 403 Forbidden

  • 目录权限不足
  • Require all granted 未配置

3. 80 端口被占用

sudo netstat -tlnp | grep :80

十、进阶配置(可选)

  • ✅ HTTPS(Let’s Encrypt)
  • ✅ 伪静态(.htaccess
  • ✅ 反向代理
  • ✅ 多端口虚拟主机

如果你愿意,可以告诉我:

  • 操作系统(Ubuntu / CentOS / Windows)
  • Apache 版本
  • 是否使用 HTTPS

我可以给你完全针对你环境的配置示例

0