Apache虚拟主机配置指南:一台服务器跑N个网站的秘密

林婉秋

你是否遇到过这样的情况:手里只有一台服务器,却想同时部署个人博客、企业官网、测试项目?Apache的虚拟主机(Virtual Host)功能就是为解决这个问题而生——它能让单台Apache服务器同时响应多个域名的请求,每个域名对应独立的网站目录和配置,资源利用率直接拉满。

一、虚拟主机的三种常见类型

Apache支持三种虚拟主机配置方式,按需选择即可:

  • 基于IP:给服务器绑定多个IP,每个IP对应一个网站(需额外IP资源,较少用);
  • 基于端口:通过不同端口区分网站(如http://yourdomain:8080,适合内部测试);
  • 基于域名:最常用!通过不同域名(如site1.comsite2.com)指向同一服务器IP,Apache自动匹配对应网站(下文重点讲解这种)。

二、基于域名的虚拟主机配置步骤

Ubuntu 20.04(Apache 2.4)为例,CentOS等系统仅配置文件路径略有不同,核心逻辑一致:

Apache虚拟主机配置指南:一台服务器跑N个网站的秘密

1. 准备网站目录与测试文件

先给两个测试网站创建独立目录,并写入不同的测试内容(方便后续验证):

# 创建目录
sudo mkdir -p /var/www/site1.com/public_html
sudo mkdir -p /var/www/site2.com/public_html

# 写入测试内容
echo "<h1>Welcome to Site1!</h1>" | sudo tee /var/www/site1.com/public_html/index.html
echo "<h1>Welcome to Site2!</h1>" | sudo tee /var/www/site2.com/public_html/index.html

# 设置目录权限(避免403错误)
sudo chown -R www-data:www-data /var/www/site1.com/public_html
sudo chown -R www-data:www-data /var/www/site2.com/public_html
sudo chmod -R 755 /var/www

2. 配置虚拟主机文件

Apache在Ubuntu中通过/etc/apache2/sites-available/目录管理虚拟主机配置,需为每个网站创建独立的.conf文件:

  • 新建site1.com.conf

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

    写入以下内容(核心参数已标注):

    <VirtualHost *:80>
      # 网站文件根目录
      DocumentRoot /var/www/site1.com/public_html
      # 主域名
      ServerName site1.com
      # 域名别名(可选,如www.site1.com)
      ServerAlias www.site1.com
    
      # 目录权限配置(解决403问题)
      <Directory /var/www/site1.com/public_html>
          Options Indexes FollowSymLinks MultiViews
          AllowOverride All
          Require all granted
      </Directory>
    
      # 日志文件(可选,方便排查错误)
      ErrorLog ${APACHE_LOG_DIR}/site1.com_error.log
      CustomLog ${APACHE_LOG_DIR}/site1.com_access.log combined
    </VirtualHost>
  • 同理,新建site2.com.conf,只需把site1.com替换为site2.com即可。

3. 启用配置并重启Apache

Ubuntu中需用a2ensite命令启用配置(a2dissite用于禁用),然后重启服务:

# 启用两个网站的配置
sudo a2ensite site1.com.conf
sudo a2ensite site2.com.conf

# 检查配置文件语法(避免拼写错误导致重启失败)
sudo apache2ctl -t

# 语法正确则重启Apache
sudo systemctl restart apache2

4. 本地测试(修改hosts文件)

若还未给域名解析到服务器IP,可通过修改本地hosts文件模拟访问(仅本地生效):

  • Windows:C:\Windows\System32\drivers\etc\hosts
  • Mac/Linux:/etc/hosts

添加以下内容(将192.168.1.100替换为你的服务器IP):

192.168.1.100 site1.com www.site1.com
192.168.1.100 site2.com www.site2.com

5. 验证结果

打开浏览器,分别访问site1.comsite2.com——若能看到不同的欢迎页面,说明虚拟主机配置成功!

三、避坑小提示

  • 防火墙:若服务器开启了防火墙(如UFW),需开放80端口:sudo ufw allow 80
  • SELinux:CentOS系统需关闭SELinux或配置权限(临时关闭:sudo setenforce 0);
  • 语法检查:每次修改配置后,务必用apachectl -t检查语法,避免重启失败。

其实Apache虚拟主机的配置逻辑很简单:用不同的域名(或IP、端口)匹配不同的网站目录。只要跟着步骤走,即使是运维新手也能快速上手。现在,不妨拿自己的服务器练手,让一台机器“变身”多网站主机吧!

文章版权声明:除非注明,否则均为婉秋博客原创文章,转载或复制请以超链接形式并注明出处。

目录[+]