核心原理
要实现多域名访问同一个网站,主要有两种核心技术方案:

- DNS 解析(服务器端):这是最常用、最推荐的方法,通过 DNS 将所有域名指向同一个服务器的 IP 地址。
- Web 服务器配置(网站代码内):当服务器接收到请求后,网站程序(如 Nginx, Apache)根据访问的域名来决定如何展示内容。
一个完整的解决方案通常是这两种方法的结合,我们用一个简单的流程图来理解:
用户输入 A.com 或 B.com
|
V
DNS 解析
|
V
指向服务器 IP ( 123.45.67.89)
|
V
服务器 (Nginx/Apache) 接收请求
|
V
服务器检查请求头中的 "Host" 字段 (是 A.com 还是 B.com?)
|
V
执行预设的规则(都指向同一个网站根目录)
|
V
返回相同的网站内容
详细操作步骤
我们将分步完成整个过程,假设你的网站已经正常运行在 www.myprimarydomain.com。
第 1 步:DNS 解析(基础设置)
这一步的目标是让所有域名都指向你的服务器。
- 登录你的域名注册商后台:GoDaddy, Namecheap, 阿里云, 腾讯云等。
- 找到 DNS 管理或解析设置:进入你想要添加的“额外域名”的管理页面。
- 添加 A 记录:
- 类型:选择
A记录。 - 主机记录:填写 (代表根域名,如
example.com)或www(代表www.example.com),你需要为每个需要解析的子域名都添加一条记录。 - 记录值:填写你主网站的服务器 IP 地址,你可以在你的虚拟主机服务商或云服务商(如阿里云ECS、腾讯云CVM)的控制台找到这个公网 IP 地址。
- TTL:保持默认即可(如
600秒)。
- 类型:选择
示例:
假设你的主网站 www.myprimarydomain.com 的服务器 IP 是 45.67.89。
现在你希望 brandnew.com 和 anotherdomain.com 也指向这个网站。

- 在
brandnew.com的 DNS 设置中,添加:A记录: ->45.67.89A记录:www->45.67.89
- 在
anotherdomain.com的 DNS 设置中,添加相同的记录。
完成这一步后,DNS 解析就完成了。
第 2 步:Web 服务器配置(关键步骤)
这一步确保服务器知道如何处理这些来自不同域名的请求,以最常用的 Nginx 和 Apache 为例。
方案 A:使用 Nginx
Nginx 的配置非常灵活,你可以在一个 server 块中通过 server_name 指令列出所有域名,或者在多个 server 块中指向相同的 root 目录。
方法 1:单配置文件(推荐)
在 Nginx 的配置文件中(通常在 /etc/nginx/sites-available/ 目录下),你可以这样配置:
# 定义网站根目录和日志路径
# 这些变量可以在多个 server 块中复用
set $root_path /var/www/my-primary-website;
set $access_log /var/log/nginx/my-primary-website.access.log;
set $error_log /var/log/nginx/my-primary-website.error.log;
# 主域名配置
server {
listen 80;
listen [::]:80;
# 列出所有要指向这个网站的域名
server_name www.myprimarydomain.com myprimarydomain.com brandnew.com www.brandnew.com anotherdomain.com www.anotherdomain.com;
root $root_path;
index index.html index.htm;
access_log $access_log;
error_log $error_log;
# ... 其他 location 配置 ...
location / {
try_files $uri $uri/ =404;
}
}
方法 2:多配置文件(便于管理)
如果你希望每个域名都有独立的配置文件,但内容指向同一个地方:
# /etc/nginx/sites-available/my-primary-website
server {
listen 80;
server_name www.myprimarydomain.com myprimarydomain.com;
root /var/www/my-primary-website;
# ... 其他配置 ...
}
# /etc/nginx/sites-available/brandnew-domain
server {
listen 80;
server_name brandnew.com www.brandnew.com;
# 指向和主网站完全相同的目录
root /var/www/my-primary-website;
# ... 其他配置 ...
}
# /etc/nginx/sites-available/another-domain
server {
listen 80;
server_name anotherdomain.com www.anotherdomain.com;
root /var/www/my-primary-website;
# ... 其他配置 ...
}
配置完成后,记得创建软链接到 sites-enabled 目录并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/my-primary-website /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/brandnew-domain /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/another-domain /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl restart nginx
方案 B:使用 Apache
Apache 的配置类似,通常在 sites-available 目录下的虚拟主机配置文件中。
<VirtualHost *:80>
# ServerAdmin webmaster@brandnew.com # 可选,设置管理员邮箱
# 列出所有域名
ServerName www.myprimarydomain.com
ServerAlias myprimarydomain.com brandnew.com www.brandnew.com anotherdomain.com www.anotherdomain.com
# 指向网站根目录
DocumentRoot /var/www/my-primary-website
<Directory /var/www/my-primary-website>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# ... 其他配置 ...
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
配置完成后,启用站点并重启 Apache:
sudo a2ensite my-primary-website.conf # 假设文件名是这个 sudo systemctl restart apache2
第 3 步:处理 HTTPS (SSL 证书)
你的网站可以通过 HTTP 访问了,但为了安全,必须配置 HTTPS。
-
获取通配符证书或多域名证书:
- 通配符证书:
*.myprimarydomain.com可以保护myprimarydomain.com、www.myprimarydomain.com、shop.myprimarydomain.com等,但不能保护brandnew.com。 - 多域名证书:一张证书可以保护多个不同的域名,
myprimarydomain.com,brandnew.com,anotherdomain.com,这是最推荐的方式。
- 通配符证书:
-
安装证书:
- Let's Encrypt (免费):可以使用
Certbot工具自动申请和部署证书,Certbot 非常智能,它会自动修改你的 Nginx 或 Apache 配置文件,添加 HTTPS 监听和重定向规则。 - 商业证书:购买后,你需要手动将证书文件(
.crt,.key)上传到服务器,并配置服务器使用它们。
- Let's Encrypt (免费):可以使用
Nginx HTTPS 配置示例:
server {
listen 80;
# 将所有 HTTP 请求重定向到 HTTPS
server_name www.myprimarydomain.com myprimarydomain.com brandnew.com www.brandnew.com anotherdomain.com www.anotherdomain.com;
return 301 https://$host$request_uri; # $host 会自动替换成用户访问的域名
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.myprimarydomain.com myprimarydomain.com brandnew.com www.brandnew.com anotherdomain.com www.anotherdomain.com;
# SSL 证书配置
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
root /var/www/my-primary-website;
# ... 其他配置 ...
}
高级配置与注意事项
域名重定向 vs. 域名解析
- 域名解析:如上所述,所有域名都指向同一个网站内容,用户访问
A.com和B.com看到的内容是一样的。 - 域名重定向:当你希望用户访问
B.com时,自动跳转到A.com,这通常在 DNS 层面或服务器层面完成。- DNS 301 重定向:部分域名注册商提供此功能,但功能有限,不如服务器端灵活。
- 服务器端重定向:在 Nginx/Apache 中,你可以配置一个
server块,专门处理B.com,并将其永久重定向(301)到A.com。
Nginx 重定向示例:
server {
listen 80;
server_name old-domain.com www.old-domain.com;
return 301 https://www.new-domain.com$request_uri;
}
SEO 考虑
- 首选域名:确定一个主域名(如
myprimarydomain.com),并在网站的<head>部分添加canonical标签,告诉搜索引擎这是内容的原始地址。<link rel="canonical" href="https://www.myprimarydomain.com/current-page" />
- 统一性:确保所有外部链接都指向你的首选域名,避免权重分散。
- 301 重定向:如果你决定废弃某个域名,务必使用 301 永久重定向,将它的权重传递给主域名。
Cookie 作用域
如果你的网站使用会话 Cookie 来管理登录状态,需要注意 Cookie 的作用域,默认情况下,Cookie 只对当前域名有效,如果你希望用户在 A.com 登录后,访问 B.com 仍然是登录状态,你需要设置 Cookie 的 domain 属性为 .yourmaindomain.com(注意前面的点)。
将多域名解析到同一网站,最佳实践流程如下:
- DNS 解析:在所有域名的 DNS 设置中,添加
A记录,将它们全部指向你服务器的同一个公网 IP 地址。 - 服务器配置:在 Nginx 或 Apache 的虚拟主机配置中,为所有域名配置
server_name,并将它们的DocumentRoot(或root)指向同一个网站文件目录。 - 配置 HTTPS:为所有域名申请并安装一张多域名 SSL 证书,并配置服务器强制将 HTTP 流量重定向到 HTTPS。
- SEO 和优化:设置
canonical标签,并考虑 Cookie 的作用域问题。
遵循以上步骤,你就可以安全、高效地将多个域名统一指向你的网站了。
