Nginx基于域名区分的多网站部署

生产环境几乎总是选择"基于域名区分 + 统一使用 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
实验环境:临时用端口没问题

相关推荐
回眸不遇5 小时前
类型的区别和应用场景 nested 每个对象独立存储为隐藏的子文档 适合存储数组 查询的时候有特定的语法 nested查询 且字段要 ...
运维·jenkins
诸葛老刘5 小时前
Ubuntu 服务器常用运维命令
运维·服务器·ubuntu
魏码不凡5 小时前
CURL报错:未找到SSL证书文件问题
开发语言·php·ssl
红叶舞5 小时前
成数据绑定对象,在应用程序中处理完数据后,将更新的数据序列化为JSON传回远端服务器,很多移动应用使用了这种模式处理服务器端的数据。 ...
运维·服务器·json
深圳恒讯5 小时前
H100服务器是什么?H100服务器适合哪些企业?
运维·服务器
翼龙云_cloud5 小时前
阿里云国际站代理商:ECS弹性伸缩 自动应对流量高峰
运维·网络·数据库·阿里云·架构
ZJH__GO5 小时前
网络编程v4--群聊和私聊的实现
运维·服务器·网络
邪修king6 小时前
Re:Linux系统篇(六):动静态库 & 链接机制【完整透彻版】
linux·运维·服务器
严谨的麻辣烫13 小时前
Linux sysctl 网络参数调优实战:高并发与长连接场景下的内核配置
linux·网络·php
name好难取诶16 小时前
PHP 静态分析工具实战 PHPStan 和 Psalm 完全指南
android·开发语言·php