当前位置:首页 > 虚拟主机 > 正文

创建两个域名的虚拟主机

在服务器安装Web服务后,添加两域名解析至同IP,配置不同文档根目录,通过主机头

前期准备

基础条件清单

项目 要求 说明
公网服务器 已部署Web服务(推荐Apache/Nginx) 确保可通过公网IP访问
域名所有权 持有两个独立域名 完成域名注册及实名认证
DNS管理权限 可修改域名解析记录 需登录域名注册商控制台
系统权限 root/sudo用户 用于修改系统配置文件

核心原理说明

通过基于名称的虚拟主机技术实现:同一台物理服务器根据HTTP请求头中的Host字段,将请求路由至不同文档根目录,需满足以下条件:

  • 所有虚拟主机共用同一个IP地址
  • 各域名已完成A记录指向该IP
  • Web服务器软件支持多站点配置

Apache实现方案(以Ubuntu为例)

配置文件路径

/etc/apache2/sites-available/ # 存放未启用站点配置
/etc/apache2/sites-enabled/   # 存放已启用站点配置
/etc/apache2/apache2.conf     # 主配置文件加载目录

创建第一个站点(example.com)

操作步骤:

  1. 创建配置文件:sudo nano /etc/apache2/sites-available/example.com.conf
  2. 输入以下内容:
    <VirtualHost :80>
     ServerAdmin admin@example.com
     ServerName example.com
     DocumentRoot /var/www/example.com/public_html
     ErrorLog ${APACHE_LOG_DIR}/example_error.log
     CustomLog ${APACHE_LOG_DIR}/example_access.log combined
     <Directory /var/www/example.com/public_html>
         Options Indexes FollowSymLinks
         AllowOverride All
         Require all granted
     </Directory>
    </VirtualHost>
  3. 创建目录并赋权:
    sudo mkdir -p /var/www/example.com/public_html
    sudo chown -R www-data:www-data /var/www/example.com
  4. 启用站点:
    sudo a2ensite example.com.conf

创建第二个站点(testsite.org)

操作步骤:

创建两个域名的虚拟主机  第1张

  1. 新建配置文件:sudo nano /etc/apache2/sites-available/testsite.org.conf
  2. 输入配置:
    <VirtualHost :80>
     ServerAdmin webmaster@testsite.org
     ServerName testsite.org
     DocumentRoot /var/www/testsite.org/html
     ErrorLog ${APACHE_LOG_DIR}/testsite_error.log
     CustomLog ${APACHE_LOG_DIR}/testsite_access.log combined
     <Directory /var/www/testsite.org/html>
         Options Indexes MultiViews
         AllowOverride None
         Require all granted
     </Directory>
    </VirtualHost>
  3. 创建目录结构:
    sudo mkdir -p /var/www/testsite.org/html
    echo "<h1>Test Site Active</h1>" | sudo tee /var/www/testsite.org/html/index.html
    sudo chown -R www-data:www-data /var/www/testsite.org
  4. 启用新站点:
    sudo a2ensite testsite.org.conf

最终验证与重启

sudo apachectl configtest  # 检查语法错误
sudo systemctl restart apache2

Nginx实现方案(对比表)

功能组件 Apache配置方式 Nginx配置方式
虚拟主机定义 <VirtualHost>

server
文档根目录 DocumentRoot指令 root指令
日志文件 ErrorLog/CustomLog access_log/error_log
目录权限控制 <Directory>

location块 + try_files
默认首页 Indexes选项自动识别 index指令明确指定
典型配置文件 sites-目录 /etc/nginx/conf.d/

Nginx示例配置片段:

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com/public_html;
    location / {
        try_files $uri $uri/ =404;
    }
}

DNS解析关键步骤

域名类型 记录类型 TTL建议 作用说明
example.com A记录 服务器公网IP 3600s 将域名解析到服务器IP
testsite.org A记录 服务器公网IP 3600s 同上
www.example.com CNAME example.com 7200s 可选带www前缀的别名解析

常见问题与解答

Q1: 访问域名显示"找不到网页"怎么办?

A: 按顺序排查以下原因:

  1. DNS未生效:执行dig example.com +short查看是否返回正确IP
  2. 防火墙阻断:检查ufw/firewalld是否开放80/443端口
  3. 配置文件错误:运行apachectl configtestnginx -t验证语法
  4. 文件权限不足:确认文档根目录属主为www-data且权限≥755
  5. SELinux限制:临时禁用验证:sudo setenforce 0

Q2: 如何区分不同域名的流量统计?

A: 两种有效方法:

  1. 日志分析法:通过CustomLog指定的不同日志文件(如example_access.log和testsite_access.log),使用GoAccess工具生成独立统计报表。
  2. 统计代码嵌入:在各站点首页插入唯一标识的统计像素(如百度统计/Google Analytics),通过UA参数
0