上一篇
在服务器安装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参数
