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

创建两个域名的虚拟主机

在服务器安装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>

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

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 configtest或nginx -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参数

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

0