上一篇
创建两个域名的虚拟主机
- 虚拟主机
- 2025-08-11
- 4
在服务器安装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)
操作步骤:
- 创建配置文件:
sudo nano /etc/apache2/sites-available/example.com.conf
- 输入以下内容:
<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>
- 创建目录并赋权:
sudo mkdir -p /var/www/example.com/public_html sudo chown -R www-data:www-data /var/www/example.com
- 启用站点:
sudo a2ensite example.com.conf
创建第二个站点(testsite.org)
操作步骤:
- 新建配置文件:
sudo nano /etc/apache2/sites-available/testsite.org.conf
- 输入配置:
<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>
- 创建目录结构:
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
- 启用新站点:
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: 按顺序排查以下原因:
- DNS未生效:执行
dig example.com +short
查看是否返回正确IP - 防火墙阻断:检查ufw/firewalld是否开放80/443端口
- 配置文件错误:运行
apachectl configtest
或nginx -t
验证语法 - 文件权限不足:确认文档根目录属主为
www-data
且权限≥755 - SELinux限制:临时禁用验证:
sudo setenforce 0
Q2: 如何区分不同域名的流量统计?
A: 两种有效方法:
- 日志分析法:通过
CustomLog
指定的不同日志文件(如example_access.log和testsite_access.log),使用GoAccess工具生成独立统计报表。 - 统计代码嵌入:在各站点首页插入唯一标识的统计像素(如百度统计/Google Analytics),通过UA参数