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
实验环境:临时用端口没问题

相关推荐
用户0328472220709 小时前
如何搭建本地yum源(上)
运维
ping某1 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
BingoGo2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982072 天前
PHP 扩展——从入门到理解
php
鹏仔先生3 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信