官方网站 云服务器 专用服务器香港云主机28元月 全球云主机40+ 数据中心地区 成品网站模版 企业建站 业务咨询 微信客服 控制版面

apache设置虚拟主机服务

admin 7个月前 (01-20) 阅读数 439 #虚拟主机知识
文章标签 Apache服务器配置

Apache设置虚拟主机服务:实现多站点部署的完整指南

在现代Web开发与运维实践中,服务器资源的高效利用已成为关键课题,一台物理服务器往往需要同时托管多个网站或应用系统,为了实现不同域名之间的独立访问与管理隔离,Apache HTTP Server 提供了强大的 虚拟主机(Virtual Host) 功能。

通过配置虚拟主机,管理员可以在同一台服务器上运行多个完全独立的网站,每个站点拥有各自的文档根目录、访问控制策略、日志记录机制,甚至支持独立的SSL/TLS加密证书,这不仅显著提升了资源利用率,也简化了多站点环境下的维护工作。

本文将从基础概念入手,逐步讲解如何在 Linux 系统中基于 Apache 2.4+ 配置基于名称的虚拟主机,并涵盖HTTPS启用、高级技巧及常见问题排查,帮助开发者和系统管理员轻松掌握多站点部署的核心技能。


什么是虚拟主机?

虚拟主机是一种允许单台服务器响应多个域名请求的技术,它使得多个网站可以共享相同的IP地址和硬件资源,而对外表现为彼此独立的服务实体。

根据实现方式的不同,虚拟主机主要分为以下三种类型:

基于名称的虚拟主机(Name-based Virtual Hosting)

这是目前最常用的形式,多个域名指向同一个公网IP地址,Apache 通过分析HTTP请求头中的 Host 字段来判断用户意图访问的具体站点,并返回对应的内容。

www.site1.comwww.site2.com 可以共用一个IP地址,但展示截然不同的网页内容,这种方式节省IP资源,适合绝大多数场景。

✅ 推荐指数:★★★★★
⚠️ 要求:客户端浏览器和服务器均需支持 HTTP/1.1 协议。

基于IP的虚拟主机(IP-based Virtual Hosting)

每个虚拟主机绑定唯一的IP地址,这种方式通常用于旧版SSL协议环境中(如不支持SNI),因为早期的TLS无法在同一IP上为多个域名提供不同的证书。

❌ 缺点:受限于IPv4地址稀缺,成本较高,现已较少使用。
✅ 优势:安全性更高,便于网络层隔离。

基于端口的虚拟主机(Port-based Virtual Hosting)

不同的站点监听不同的TCP端口(如80、8080、8888等),用户必须在URL中显式指定端口号才能访问目标站点,http://example.com:8080

🛠 适用场景:主要用于本地测试、开发调试或内部服务暴露,不适合生产环境面向公众使用。


本文将以“基于名称的虚拟主机”为核心进行详细说明,因其具备高兼容性、低资源消耗和易维护等优点,是当前主流部署方案。


准备工作:搭建实验环境

在开始配置前,请确保满足以下前提条件:

  • 已安装 Apache HTTP Server 2.4 或以上版本
  • 拥有系统管理员权限(root 或 sudo 权限)
  • 至少两个域名已解析至该服务器公网IP(可用本地 hosts 文件模拟测试)
  • 使用主流 Linux 发行版(如 Ubuntu、Debian、CentOS 等)

💡 示例环境:Ubuntu 22.04 LTS

安装 Apache 服务

sudo apt update
sudo apt install apache2 -y

启动并设置开机自启

sudo systemctl start apache2
sudo systemctl enable apache2

验证服务状态

打开浏览器访问 http://<your_server_ip>,若能看到 Apache 默认欢迎页面,则表示服务正常运行。

# 查看服务状态
sudo systemctl status apache2

创建站点目录结构

为保证各站点相互独立、便于管理,建议为每个网站创建专属的目录结构。

假设我们要部署两个站点:example1.comexample2.com

创建目录

sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/html

添加测试首页文件

# example1.com 主页
echo '<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8" />Example One</title>
</head>
<body>
    <h1 style="color:#3366cc;">Welcome to Example1.com!</h1>
    <p>This site is powered by Apache Virtual Host.</p>
</body>
</html>' | sudo tee /var/www/example1.com/html/index.html
# example2.com 主页
echo '<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8" />Example Two</title>
</head>
<body>
    <h1 style="color:#ff6600;">Welcome to Example2.com!</h1>
    <p>Different domain, different content — all on one server.</p>
</body>
</html>' | sudo tee /var/www/example2.com/html/index.html

设置正确的文件权限

确保 Apache 进程(通常是 www-data 用户)能正确读取这些文件:

sudo chown -R www-data:www-data /var/www/example1.com/html
sudo chown -R www-data:www-data /var/www/example2.com/html
sudo chmod -R 755 /var/www/

配置虚拟主机文件

Apache 的虚拟主机配置文件通常位于 /etc/apache2/sites-available/ 目录下,启用后会软链接到 sites-enabled 目录。

创建第一个站点配置文件

新建 /etc/apache2/sites-available/example1.com.conf

<VirtualHost *:80>
    ServerName example1.com
    ServerAlias www.example1.com
    DocumentRoot /var/www/example1.com/html
    ErrorLog ${APACHE_LOG_DIR}/example1_error.log
    CustomLog ${APACHE_LOG_DIR}/example1_access.log combined
    <Directory /var/www/example1.com/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

创建第二个站点配置文件

新建 /etc/apache2/sites-available/example2.com.conf

<VirtualHost *:80>
    ServerName example2.com
    ServerAlias www.example2.com
    DocumentRoot /var/www/example2.com/html
    ErrorLog ${APACHE_LOG_DIR}/example2_error.log
    CustomLog ${APACHE_LOG_DIR}/example2_access.log combined
    <Directory /var/www/example2.com/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

配置项详解

指令 说明
ServerName 当前虚拟主机的主要域名
ServerAlias 其他别名域名(如带www)
DocumentRoot 网站主目录路径
ErrorLog / CustomLog 错误日志与访问日志路径
<Directory> 区块 控制目录访问权限
Options Indexes FollowSymLinks 允许目录浏览(上线时建议关闭)
AllowOverride All 支持 .htaccess 文件覆盖配置
Require all granted 允许所有IP访问此目录

🔐 安全提示:在生产环境中应谨慎开启 Indexes,防止敏感文件被意外列出。


启用虚拟主机并重载配置

新创建的站点默认处于禁用状态,需手动启用。

启用站点配置

sudo a2ensite example1.com.conf
sudo a2ensite example2.com.conf

(可选)禁用默认站点

避免与自定义站点冲突:

sudo a2dissite 000-default.conf

重新加载 Apache 配置

sudo systemctl reload apache2

✅ 此操作不会中断现有连接,推荐优先使用 reload 而非 restart


测试域名解析(无真实域名时)

如果你尚未购买正式域名,可以通过修改本地计算机的 hosts 文件实现临时映射。

Windows 系统

编辑文件:
C:\Windows\System32\drivers\etc\hosts 替换 <server_ip> 为实际服务器IP):

<server_ip> example1.com
<server_ip> example2.com

macOS / Linux 系统

编辑文件:
/etc/hosts

同样添加上述映射。

保存后,在浏览器中分别访问:

  • http://example1.com
  • http://example2.com

你应该

版权声明
本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主 如果涉及侵权请尽快告知,我们将会在第一时间删除。
本站原创内容未经允许不得转载,或转载时需注明出处:特网云知识库

热门