
生产环境几乎总是选择"基于域名区分 + 统一使用 80/443 端口"。来实现多网站部署
下面我从"为什么"、"两者可以同时使用"、"为什么 80/443 是标准"三个角度详细拆解。
一、总结结论
| 方式 | 端口 | 域名 | 好坏 |
|---|---|---|---|
| 基于域名 | 统一 80/443 | 多个域名 | ✅ 生产首选 |
| 基于端口 | 不同端口 | 一个 IP | ❌ 不方便、非标 |
| 基于端口 + 域名 | 不同端口 | 多个域名 | ✅ 特殊场景可用 |
二、"基于域名区分"为什么比"基于端口"更好?
✅ 基于域名(推荐)
nginx
# 网站1
server {
listen 80;
server_name rent.example.com;
root /opt/rentalhousing;
}
# 网站2
server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
}
用户访问:
bash
http://rent.example.com ✅
http://blog.example.com ✅
特点:
- 用户不用记端口
- 可配 HTTPS(一个证书或不同证书)
- 符合 Web 标准
- 可无限扩展
❌ 基于端口(不推荐生产)
nginx
# 网站1
server {
listen 8080;
server_name _;
root /opt/rentalhousing;
}
# 网站2
server {
listen 8081;
server_name _;
root /var/www/blog;
}
用户访问:
bash
http://你的IP:8080 ❌ 用户必须记端口
http://你的IP:8081
问题:
- 体验极差
- 无法使用 HTTPS(端口混乱)
- SEO / 分享链接难看
- 浏览器 / 防火墙 / 代理容易出问题
三、端口区分 + 域名可以同时用吗?
可以,但几乎不会这么用。
示例:
nginx
# 同一个域名通过不同端口访问不同应用
server {
listen 80;
server_name rent.example.com;
root /opt/rentalhousing;
}
server {
listen 8080;
server_name rent.example.com;
root /var/www/legacy;
}
问题:
- 用户访问
http://rent.example.com:8080 - 既不优雅、也不方便
- 不如直接用不同域名或不同路径
👉 结论:技术上可行,实践中不推荐
四、为什么 80 / 443 端口这么特殊?
| 原因 | 说明 |
|---|---|
| Web 标准 | 浏览器默认请求 80(HTTP) / 443(HTTPS) |
| 用户无感 | 不需要输入 :3000、:8080 |
| HTTPS 统一 | 证书、HSTS 都基于 80/443 |
| 防火墙友好 | 几乎所有网络都放开 80/443 |
五、真实生产场景的对比(非常重要)
假设你有两个网站:
❌ 错误错误方案(端口区分)
nginx
rent.com → 80
blog.com → 8080
用户访问:
bash
http://rent.com ✅
http://blog.com:8080 ❌
👉 没有人愿意访问 blog.com:8080
✅ 正确标准方案(域名区分)
nginx
rent.com → 80/443
blog.com → 80/443
用户:
bash
http://rent.com
http://blog.com
✅ 完美
六、什么时候应该用"端口区分"?
| 场景 | 是否合理 |
|---|---|
| 开发 / 测试环境 | ✅ 非常常用 |
| 内部管理后台 | ✅ 可接受 |
| 同一个 IP / 临时服务 | ✅ 可以 |
| 对外生产服务 | ❌ 极其不推荐 |
示例(合理使用端口):
nginx
server {
listen 80;
server_name rent.example.com;
root /opt/rentalhousing;
}
server {
listen 3000;
server_name rent.example.com;
root /opt/rentalhousing/admin;
}
但更推荐用:
nginx
location /admin {
...
}
七、一句话极简总结
域名负责"你是谁",端口负责"怎么连"。
生产环境:用域名 + 标准端口 80/443
实验环境:临时用端口没问题