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

相关推荐
xywww1682 小时前
大模型 API 选型实战:GPT、Gemini、Claude 接入时该看哪些指标?
运维·服务器·人工智能·python·gpt·langchain
梦想的颜色5 小时前
【Docker原理】Docker 容器一文打尽:生命周期、环境管控、迁移备份、日志进程排查、垃圾清理
运维·docker·容器·容器生命周期·容器日志排查·容器迁移备份·容器进程管理
donoot7 小时前
Linux系统下图书馆级电子书全自动标准化分类整理完整实施方案
大数据·linux·运维·电子书管理
ITKEY_8 小时前
macOS brew 安装的nginx 文件在哪里?
运维·nginx·macos
Felix-lxd8 小时前
Ubuntu 22.04 配置 Nginx
linux·nginx·ubuntu
Elastic 中国社区官方博客8 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
weixin_BYSJ19879 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
Tim_Van9 小时前
在 CentOS 7 中安装 Chromium 的完整步骤
linux·运维·chrome·centos
孫治AllenSun10 小时前
【Nginx】配置参数和使用案例
运维·nginx
啵啵鱼爱吃小猫咪11 小时前
Ubuntu 20.04 + ROS Noetic 源码安装 libfranka 0.8.0 和 franka_ros 0.8.0 完整教程
linux·运维·ubuntu