新手入门必看:一个域名怎么做多个网站,省钱又避坑
找建站公司报价,动不动就上万,甚至被忽悠买高价服务器?别急,这行水深,但核心逻辑其实不复杂。很多新手入门时最容易踩的坑,就是以为一个域名只能绑一个网站,结果为了多开几个项目,被迫注册一堆新域名,或者被迫接受厂商的高溢价套餐。
其实,一个域名怎么做多个网站,是服务器运维和Web开发里最基础也最省钱的操作。只要搞懂虚拟主机、反向代理和DNS解析,你自己就能把成本压到最低。今天这篇干货,不玩虚的,直接拆解从域名解析到服务器配置的全流程,教你用最低的预算,搭建出专业的多站点架构。
概念速懂:虚拟主机与反向代理的区别
在动手之前,必须先把概念捋清楚,不然配置时容易乱。所谓“一个域名下挂多个网站”,技术上主要有两条路:虚拟主机(Virtual Hosts) 和 反向代理(Reverse Proxy)。
很多新手混淆这两个概念,导致后期维护噩梦。简单打个比方:
- 虚拟主机就像一栋公寓楼,每个房间(子域名或主域名)都有独立的门牌号,直接对应到不同的网站文件目录。这是Nginx和Apache最传统的处理方式。
- 反向代理则像一个总机接线员,它接收所有请求,然后根据你输入的网址(URL),把请求转发给后台不同的服务器或端口。
对于大多数中小型企业官网、个人博客或测试环境,虚拟主机是首选。因为它配置简单,资源隔离性好,Nginx原生支持,性能损耗极小。而反向代理通常用于微服务架构,或者当你的多个网站运行在不同的操作系统、不同的物理服务器时。
关键区别在于:
- 资源占用:虚拟主机共享同一个Nginx/Apache进程,内存占用低;反向代理如果配置不当,可能增加网络跳转延迟。
- 安全性:虚拟主机之间如果配置出错,可能出现跨站访问;反向代理可以通过更严格的Header过滤来增强安全。
- 适用场景:静态网站、WordPress博客、简单动态站选虚拟主机;需要独立IP、独立进程、高并发隔离的场景选反向代理。
本文重点讲解最通用的虚拟主机方案,这也是新手入门性价比最高的选择。
注册与购买:域名与服务器选型策略
既然要省,第一步就是选对硬件和域名。别被销售话术带偏,新手入门最容易在服务器选型上花冤枉钱。
1. 域名选择策略
如果你只有一个主域名 example.com,想要做多个网站,你有两种路径:
- 子域名模式:
shop.example.com(商城)、blog.example.com(博客)、hr.example.com(招聘页)。 - 主域名模式:
example.com(官网首页)、www.example.com(也是官网,需重定向)。
强烈建议新手优先使用子域名。原因有二:
- SEO友好:子域名在搜索引擎眼里是独立站点,有利于分散权重,避免主域名因为某个子站被K而连累整体。
- 管理清晰:DNS解析记录多一条子域名记录即可,不需要额外购买新域名。
2. 服务器配置底线
很多小白以为多网站就需要高配服务器,这是误区。一个Nginx实例可以同时处理成千上万个虚拟主机,瓶颈通常在CPU和内存,而非域名数量。
推荐配置(2024年行情):
- CPU:2核及以上(推荐Intel Xeon系列,频率3.0GHz+)。
- 内存:4GB起步(Linux系统下,4GB能轻松跑5-10个中小型PHP/Node.js站点)。
- 硬盘:SSD固态硬盘,100GB起(数据库IO是瓶颈,必须SSD)。
- 带宽:3M-5M共享带宽足够日常使用,高峰期再升。
避坑指南:
- 不要买“独享带宽”的虚机,性价比极低。
- 不要买Windows服务器除非你有.NET需求,Linux(CentOS/Ubuntu/Debian)对Nginx的支持更好,资源占用更少。
- 地域选择:国内站选北京、上海、广州节点,延迟低且方便备案;外贸站选美国、新加坡、德国节点。
配置与部署步骤:Nginx实战详解
接下来是硬核实操。假设你已经购买了一台Ubuntu 22.04的Linux服务器,并安装了Nginx。我们将演示如何通过修改Nginx配置文件,实现一个IP、一个域名下运行两个不同的网站(官网和博客)。
1. 准备网站目录
首先,在服务器创建两个独立的网站根目录:
# 创建官网目录
sudo mkdir -p /var/www/html/main-site
# 创建博客目录
sudo mkdir -p /var/www/html/blog-site# 赋予权限(假设用户名为www-data,Nginx默认运行用户)
sudo chown -R www-data:www-data /var/www/html/main-site
sudo chown -R www-data:www-data /var/www/html/blog-site
将你的网站文件上传到对应的目录中。如果是WordPress,直接解压上传即可;如果是静态HTML,把index.html放进去。
2. 配置Nginx虚拟主机
Nginx的配置文件通常位于 /etc/nginx/sites-available/。我们需要为每个网站创建一个配置文件。
步骤一:创建官网配置
sudo nano /etc/nginx/sites-available/main-site.conf
写入以下内容:
server {listen 80;server_name example.com www.example.com; # 绑定主域名root /var/www/html/main-site; # 指向官网目录index index.html index.htm;location / {try_files $uri $uri/ =404;}# 静态文件缓存location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;access_log off;}
}
步骤二:创建博客子域名配置
sudo nano /etc/nginx/sites-available/blog-site.conf
写入以下内容:
server {listen 80;server_name blog.example.com; # 绑定子域名root /var/www/html/blog-site; # 指向博客目录index index.html index.php; # WordPress需要PHPlocation / {try_files $uri $uri/ /index.php?$args; # WordPress标准配置}location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 根据实际PHP版本修改}
}
步骤三:启用配置并重载
# 创建软链接到 sites-enabled 目录
sudo ln -s /etc/nginx/sites-available/main-site.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/blog-site.conf /etc/nginx/sites-enabled/# 删除默认配置(避免冲突)
sudo rm /etc/nginx/sites-enabled/default# 测试配置语法
sudo nginx -t# 如果显示 "syntax is ok" 和 "test is successful",重载Nginx
sudo systemctl reload nginx
3. DNS解析设置
配置完服务器后,回到域名管理后台(如阿里云、腾讯云或Cloudflare)。
- A记录:
- 主机记录:
@(代表example.com) -> 值:你的服务器公网IP - 主机记录:
www-> 值:你的服务器公网IP - 主机记录:
blog-> 值:你的服务器公网IP
- 主机记录:
注意:DNS解析生效时间通常在几分钟到24小时之间。可以用 ping example.com 或 nslookup blog.example.com 检查是否已指向正确IP。
4. 进阶:GitHub开源自动化部署
手动配置虽然稳,但重复劳动多。对于追求效率的新手,推荐使用GitHub上的开源项目 Coolify 或 CapRover。
以 CapRover 为例,它是一个基于Docker的轻量级PaaS平台,支持一键部署WordPress、Node.js、Python应用。
- 在服务器安装Docker。
- 执行
docker run -d --name caprover -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v caprover:/opt/caprover/caprover --restart=always caprover/caprover - 访问
http://你的IP:3000,通过Web界面绑定域名、选择应用模板(如WordPress),它会自动配置Nginx反向代理、SSL证书和数据库。
这种方式不仅解决了“一个域名怎么做多个网站”的配置问题,还解决了SSL证书自动续签的痛点。GitHub上搜索 caprover 或 coolify,star数都过万,社区活跃,文档齐全,非常适合新手入门尝试自动化运维。
常见问题与排错
配置过程中,新手最常遇到以下几个坑,提前知道能省下一半的时间。
1. 访问显示404 Not Found
- 原因:Nginx的
root路径写错,或者文件权限不对。 - 解决:检查
/var/www/html/下的文件是否真的存在。执行ls -l /var/www/html/main-site确认权限,确保Nginx用户(www-data)有读取权限。
2. 子域名无法访问,跳转到主域名
- 原因:Nginx中
server_name配置冲突,或者主域名的配置中包含了通配符*.example.com。 - 解决:检查所有
server块,确保blog.example.com有独立的server块,且没有在主域名配置中被location规则覆盖。Nginx匹配规则中,精确匹配优先于通配符,但前提是通配符存在。
3. PHP版本报错或页面空白
- 原因:
fastcgi_pass指向的Socket文件路径错误,或者PHP-FPM服务未启动。 - 解决:执行
ls /var/run/php/查看实际Socket文件名。确保php8.1-fpm服务正在运行:sudo systemctl status php8.1-fpm。
4. 跨域问题(CORS)
- 原因:如果博客和官网前端JS相互调用,浏览器会拦截跨域请求。
- 解决:在Nginx配置中添加
add_header Access-Control-Allow-Origin *;(仅限开发环境),或者在前端代码中配置代理。生产环境建议将静态资源合并到同一域名下,或使用CDN解决。
优化建议与长期运维
网站跑起来只是开始,如何让它又快又稳,才是专业运维的体现。
1. SSL证书配置(HTTPS)
现在搜索引擎对HTTPS有排名加权。使用 Let's Encrypt 免费证书是标准操作。
安装 certbot:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com -d blog.example.com
Certbot会自动修改Nginx配置,添加443端口监听,并设置证书自动续签。
2. 性能优化:Gzip与缓存
在Nginx全局配置或具体server块中添加:
gzip on;
gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
gzip_min_length 1000;
gzip_comp_level 6;
对于静态资源,设置长缓存时间(如1年),并利用浏览器缓存减少服务器压力。
3. 安全加固
- 隐藏版本号:在Nginx配置中设置
server_tokens off;,防止攻击者扫描服务器版本。 - 限制请求方法:只允许GET、POST、HEAD,禁止TRACE等方法。
- 防火墙:使用
ufw或iptables仅开放80、443、22端口。 - 定期备份:设置Cron任务,每天凌晨备份数据库和网站文件到异地存储(如S3、OSS)。
4. 监控与日志分析
不要等网站挂了才发现。安装 Uptime Kuma(开源监控工具)或 Prometheus + Grafana,实时监控系统资源、响应时间和错误率。
定期分析Nginx访问日志,找出慢查询和高频攻击IP。
总结与互动
回到最初的问题:一个域名怎么做多个网站? 核心就是:子域名解析 + Nginx虚拟主机配置。 这套方案成本低(只需一台服务器+一个域名)、扩展性强(随时可加新子站)、SEO友好。
对于新手入门,不要一开始就追求复杂的微服务架构。先把Nginx虚拟主机玩熟,再考虑Docker容器化,最后才接触K8s。技术选型要匹配业务规模,别为了炫技而增加运维复杂度。
很多项目经理在预算有限时,倾向于选择模板建站以快速上线;而另一些人则坚持定制开发,认为长期维护成本和SEO潜力更优。
你更倾向模板建站还是定制开发?在预算有限的情况下,你通常会如何平衡开发成本与后期运维压力?欢迎在评论区聊聊你的真实经验,我们一起避坑。