利用Nginx实现一个IP部署多个网站

 更新时间:2026年05月19日 09:21:37   作者:江上清风山间明月  
文章主要介绍了如何在一个服务器/一个IP地址上部署多个网站虚拟主机的方法,主要包括基于域名、端口和IP地址的区分方式,并详细描述了Nginx的虚拟主机配置结构和匹配优先,此外,文章还提供了完整的多站点部署示例、限制方案以及管理命令速查,需要的朋友可以参考下

一个服务器/一个 IP 地址完全可以部署多个网站虚拟主机

一、一个 IP 部署多个网站的原理

1. 基于域名区分(最常见)

多个网站共享同一个 IP 和端口(80/443),Nginx 根据请求头中的 Host 字段区分:

用户访问 http://a.com   → Nginx 匹配 server_name a.com → 返回网站 A
用户访问 http://b.com   → Nginx 匹配 server_name b.com → 返回网站 B
用户访问 http://c.com   → Nginx 匹配 server_name c.com → 返回网站 C

2. 基于端口区分

不同网站用不同端口:

http://服务器IP:80    → 网站 A
http://服务器IP:8080  → 网站 B
http://服务器IP:3000  → 网站 C

3. 基于 IP 区分(需要多网卡)

http://192.168.1.10  → 网站 A
http://192.168.1.11  → 网站 B

二、Nginx 的虚拟主机配置结构

配置文件层次

/etc/nginx/
├── nginx.conf                    # 主配置文件
├── sites-available/              # 所有站点配置(仓库)
│   ├── site1.com
│   ├── site2.com
│   └── rentalhousing
└── sites-enabled/                # 启用的站点(开关)
    ├── site1.com -> ../sites-available/site1.com
    ├── site2.com -> ../sites-available/site2.com
    └── rentalhousing -> ../sites-available/rentalhousing

单个站点配置文件示例

/etc/nginx/sites-available/rentalhousing

server {
    listen 80;
    server_name rental.yourdomain.com;   # 域名1
    
    root /opt/rentalhousing/apps/web/dist;
    index index.html;
    
    location /api/ {
        proxy_pass http://127.0.0.1:3000;
    }
}

/etc/nginx/sites-available/another-site

server {
    listen 80;
    server_name another.com www.another.com;   # 域名2
    
    root /var/www/another-site;
    index index.html;
}

三、完整的多站点部署示例

场景:你的服务器上部署三个网站

网站域名用途
租房系统rent.yourdomain.com你的主项目
博客blog.yourdomain.com技术博客
个人主页yourdomain.com个人介绍

步骤

1. 创建三个配置文件

# 租房系统
sudo nano /etc/nginx/sites-available/rentalhousing
server {
    listen 80;
    server_name rent.yourdomain.com;
    
    root /opt/rentalhousing/apps/web/dist;
    
    location /api/ {
        proxy_pass http://127.0.0.1:3000;
    }
}
# 博客
sudo nano /etc/nginx/sites-available/blog
server {
    listen 80;
    server_name blog.yourdomain.com;
    
    root /var/www/blog;
    index index.html;
}
# 个人主页
sudo nano /etc/nginx/sites-available/homepage
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    
    root /var/www/homepage;
    index index.html;
}

2. 启用所有站点

# 创建符号链接
sudo ln -s /etc/nginx/sites-available/rentalhousing /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/homepage /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重载 Nginx
sudo systemctl reload nginx

3. DNS 解析配置

在域名服务商处添加 A 记录:

rent.yourdomain.com   A   →  你的服务器 IP
blog.yourdomain.com   A   →  你的服务器 IP
yourdomain.com        A   →  你的服务器 IP

四、匹配优先级规则

当一个请求到达时,Nginx 按以下顺序匹配:

# 1. 精确域名匹配
server_name rent.yourdomain.com;     # 最高优先级

# 2. 通配符开头
server_name *.yourdomain.com;        # 匹配 sub.yourdomain.com

# 3. 通配符结尾
server_name rent.*;                  # 匹配 rent.anything

# 4. 正则表达式
server_name ~^(www\.)?(.+)$;         # 最低优先级

默认站点(兜底配置)

server {
    listen 80 default_server;        # 默认站点
    server_name _;                   # 匹配所有未匹配的域名
    
    return 404;                      # 或返回其他页面
}

五、使用端口区分的示例

# 端口 80 → 网站 A
server {
    listen 80;
    server_name _;
    root /var/www/site-a;
}

# 端口 8080 → 网站 B
server {
    listen 8080;
    server_name _;
    root /var/www/site-b;
}

# 端口 3000 → 网站 C(直接代理到 Node.js)
server {
    listen 3000;
    server_name _;
    
    location / {
        proxy_pass http://127.0.0.1:3001;
    }
}

六、实际验证

查看 Nginx 加载了哪些配置

# 查看所有启用的配置
sudo nginx -T | grep "server_name"
# 测试某个域名是否匹配
curl -H "Host: rent.yourdomain.com" http://你的服务器IP
curl -H "Host: blog.yourdomain.com" http://你的服务器IP

查看访问日志区分

# 为不同站点配置不同日志文件
server {
    server_name rent.yourdomain.com;
    access_log /var/log/nginx/rentalhousing-access.log;
    error_log /var/log/nginx/rentalhousing-error.log;
}

server {
    server_name blog.yourdomain.com;
    access_log /var/log/nginx/blog-access.log;
    error_log /var/log/nginx/blog-error.log;
}

七、实际限制

方案优点缺点适用场景
域名区分用户体验好、可无限扩展需要域名生产环境
端口区分无需域名、配置简单不友好、需要记住端口测试、内部系统
路径区分单一域名容易冲突、URL 不美观临时方案

路径区分示例(单一域名下)

server {
    server_name yourdomain.com;
    
    location /rental/ {
        alias /opt/rentalhousing/apps/web/dist/;
    }
    
    location /blog/ {
        alias /var/www/blog/;
    }
}

八、管理命令速查

# 列出所有可用配置
ls /etc/nginx/sites-available/
# 列出已启用的配置
ls -la /etc/nginx/sites-enabled/
# 启用站点
sudo ln -s /etc/nginx/sites-available/站点名 /etc/nginx/sites-enabled/
# 禁用站点(保留配置)
sudo rm /etc/nginx/sites-enabled/站点名
# 重新加载配置
sudo systemctl reload nginx
# 查看错误日志
sudo tail -f /var/log/nginx/error.log

总结

一个服务器/一个 IP 可以部署无限多个网站,限制只是:

  • 服务器资源(CPU、内存、带宽)
  • 文件描述符限制(Linux 系统配置)

Nginx 通过 server_namelisten 的组合,结合 sites-available/sites-enabled 目录结构,实现了清晰、灵活的站点管理。

以上就是利用Nginx实现一个IP部署多个网站的详细内容,更多关于Nginx一个IP部署多个网站的资料请关注脚本之家其它相关文章!

相关文章

  • Nginx部署SSL证书的过程

    Nginx部署SSL证书的过程

    SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本,这篇文章主要介绍了Nginx部署SSL证书的相关知识,需要的朋友可以参考下
    2022-10-10
  • 详解nginx 301跳转到带www域名方法

    详解nginx 301跳转到带www域名方法

    这篇文章主要介绍了详解nginx 301跳转到带www域名方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • lua+nginx实现黑名单禁止访问的示例代码

    lua+nginx实现黑名单禁止访问的示例代码

    本文介绍如何使用Nginx与Lua脚本通过OpenResty平台实现高效的IP黑名单功能,利用Redis存储黑名单,定时更新共享内存字典,防止恶意IP访问,感兴趣的可以了解一下
    2025-11-11
  • nginx中的正则表达式及location和rewrite总结

    nginx中的正则表达式及location和rewrite总结

    rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向,这篇文章主要介绍了nginx中的正则表达式及location和rewrite总结,需要的朋友可以参考下
    2023-12-12
  • Linux下Tomcat+Nginx服务器环境安装配置的简明教程

    Linux下Tomcat+Nginx服务器环境安装配置的简明教程

    以Nginx作为反向代理再用Tomcat驱动Java Web程序是当今很流行的一种方案,那么这里我们就着眼于最基本的生产环境搭建,一起来看一下Linux下Tomcat+Nginx服务器环境安装配置的简明教程
    2016-05-05
  • Nginx HTTPS代理大文件加载失败的排查与解决方案

    Nginx HTTPS代理大文件加载失败的排查与解决方案

    本文基于一次生产环境中的实际案例,详细解析了Nginx代理配置不当导致HTTPS访问下前端资源加载失败的问题,通过日志分析、参数调优和原理说明,为开发者提供完整的排查思路与解决方案,需要的朋友可以参考下
    2025-12-12
  • Nginx配置文件提权的实战指南

    Nginx配置文件提权的实战指南

    在现代 Linux 系统中,nginx 通常作为 Web 服务的核心组件运行,其支持的模块化配置、灵活的路径设置以及多样的文件解析能力,本文结合一次真实场景,给大家介绍如何通过配置文件完成提权操作进行深入剖析,需要的朋友可以参考下
    2025-09-09
  • Nginx/Apache服务器SSL证书自动化部署与续期实战教程

    Nginx/Apache服务器SSL证书自动化部署与续期实战教程

    文章主要介绍了手动管理SSL证书的繁琐和风险,特别是证书过期导致的业务中断,文章介绍了如何使用ACME协议和Certbot工具实现Nginx和Apache的自动化部署与续期,感兴趣的朋友一起看看吧
    2026-04-04
  • Nginx配置中使用Lua脚本的实现步骤

    Nginx配置中使用Lua脚本的实现步骤

    在阿里云API网关和字节跳动边缘计算平台中,Nginx+Lua的组合已成为处理复杂业务逻辑的标准解决方案,下面我们就来介绍一下Nginx配置中使用Lua脚本的实现步骤,感兴趣都可以了解一下
    2025-09-09
  • windows7下安装PHP+nginx的方法

    windows7下安装PHP+nginx的方法

    这篇文章主要介绍了windows7下安装PHP+nginx的方法,较为详细的分析了Windows7环境下安装php与nginx服务器环境的具体步骤与相关设置技巧,需要的朋友可以参考下
    2016-05-05

最新评论