使用Nginx搭建虚拟主机从零开始实现多站点部署
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
美国云虚拟主机 助力出海企业低成本上云 WAF网站防火墙 为您的业务网站保驾护航
在现代 Web 开发与系统运维中,服务器资源的高效利用是保障业务稳定运行的关键环节,随着互联网应用规模的不断扩展,一台物理服务器往往需要承载多个网站或服务,为满足这一需求,虚拟主机(Virtual Host)技术应运而生,并成为共享主机环境中的核心技术之一。
Nginx 作为一款高性能、轻量级的 HTTP 服务器和反向代理工具,凭借其出色的并发处理能力与低资源消耗,在高并发场景下被广泛应用于 Web 服务部署,本文将详细介绍如何通过 Nginx 配置基于域名的虚拟主机,实现在同一台服务器上安全、高效地运行多个独立域名站点。
什么是虚拟主机?
虚拟主机是一种在单一物理服务器上托管多个独立网站的技术,它允许不同的网站共享相同的硬件资源(如 CPU、内存、IP 地址),并通过特定机制进行请求分流,从而达到资源复用的目的。
根据实现方式的不同,虚拟主机主要分为以下三种类型:
-
基于名称的虚拟主机(Name-based Virtual Hosting)
最常见的形式,多个域名共享同一个 IP 地址和端口(如 80 或 443),Nginx 根据客户端请求头中的Host
字段判断应响应哪个网站,这种方式极大地节省了公网 IP 资源,适用于绝大多数 Web 应用场景。 -
基于 IP 的虚拟主机(IP-based Virtual Hosting)
每个网站绑定一个独立的 IP 地址,适用于需要 SSL/TLS 证书但未支持 SNI(Server Name Indication)的旧客户端环境,由于 IPv4 地址资源紧张,该方式使用较少。 -
基于端口的虚拟主机(Port-based Virtual Hosting)
不同站点监听不同端口(如example.com:8080
和example.com:8081
),通常用于开发测试环境,不适合公开访问的生产网站。
本文重点介绍基于名称的虚拟主机配置方法,这也是目前最主流且推荐的做法。
Nginx 简介
Nginx(发音为 “engine x”)是由俄罗斯程序员 Igor Sysoev 于 2004 年开发的一款开源高性能 Web 服务器,起初设计用于解决 C10K 问题(即同时处理上万并发连接),如今已发展成集 Web 服务、反向代理、负载均衡、缓存加速于一体的综合性网络中间件。
相较于传统的 Apache 服务器,Nginx 采用事件驱动异步架构,能够以极低的内存开销支撑海量并发连接,其配置文件简洁清晰、模块化程度高,便于维护与扩展,因此成为构建现代 Web 架构的核心组件之一。
除了作为静态资源服务器外,Nginx 还常用于:
- 反向代理动态应用(如 Node.js、Python Flask)
- 实现负载均衡与故障转移
- 提供 HTTPS 加密与 SSL 终止
- 缓存静态内容以提升响应速度
- 防御基础 DDoS 攻击与请求限流
掌握 Nginx 的基本配置与调优技巧,已成为系统管理员、DevOps 工程师和后端开发者不可或缺的能力。
环境准备
在开始配置之前,请确保具备以下条件:
- 一台运行 Linux 操作系统的服务器(推荐 Ubuntu 20.04/22.04 或 CentOS 7/8);
- 已安装并正常运行 Nginx 服务;
- 至少两个已注册并正确解析至服务器公网 IP 的域名(如
site1.com
和site2.com
); - 具备
sudo
权限的用户账户,以便执行系统级操作。
检查 Nginx 安装状态
可以通过以下命令查看 Nginx 是否已安装及其版本信息:
nginx -v
检查服务运行状态:
systemctl status nginx
若尚未安装,可根据操作系统选择对应包管理器进行安装。
在 Ubuntu/Debian 系统中:
sudo apt update sudo apt install nginx -y
在 CentOS/RHEL 系统中:
sudo yum install epel-release -y sudo yum install nginx -y # 或使用 dnf(CentOS 8+) sudo dnf install nginx -y
安装完成后启动服务并设置开机自启:
sudo systemctl start nginx sudo systemctl enable nginx
此时访问服务器的公网 IP 地址,应能看到 Nginx 默认欢迎页面,表示服务已成功运行。
创建网站目录结构
为了保证各站点之间的隔离性与可维护性,建议为每个虚拟主机创建独立的根目录。
以两个示例域名为例:site1.com
和 site2.com
,我们为其分别建立目录结构:
sudo mkdir -p /var/www/site1.com/html sudo mkdir -p /var/www/site2.com/html
在各自目录下创建简单的测试页面用于验证配置效果:
echo "<h1>欢迎访问 site1.com</h1>" | sudo tee /var/www/site1.com/html/index.html echo "<h1>欢迎访问 site2.com</h1>" | sudo tee /var/www/site2.com/html/index.html
设置正确的文件权限,确保 Nginx 进程(通常以 www-data
用户运行)可以读取网页内容:
sudo chown -R www-data:www-data /var/www/site1.com sudo chown -R www-data:www-data /var/www/site2.com sudo chmod -R 755 /var/www/*
⚠️ 注意:
/var/www
是标准的 Web 内容存放路径,遵循 Linux 文件系统层次结构标准(FHS),不建议随意更改,除非有特殊安全策略要求。
配置 Nginx 虚拟主机
Nginx 的核心配置文件通常位于 /etc/nginx/nginx.conf
,其中定义了全局参数、工作进程模型和事件处理机制,对于站点级别的配置,更推荐采用“模块化”的管理方式——即将每个站点的配置单独存放在 /etc/nginx/sites-available/
目录下,并通过符号链接启用到 /etc/nginx/sites-enabled/
。
这种做法不仅提高了配置的可读性,也方便后续对站点进行启停控制。
创建站点配置文件
配置 site1.com
使用文本编辑器创建第一个站点的配置文件:
sudo nano /etc/nginx/sites-available/site1.com
填入如下配置内容:
server { listen 80; server_name site1.com www.site1.com; root /var/www/site1.com/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } access_log /var/log/nginx/site1.com.access.log; error_log /var/log/nginx/site1.com.error.log; }
配置 site2.com
同理,创建第二个站点配置:
systemctl status nginx0
如下:
systemctl status nginx1
🔍 配置说明:
listen 80;
:监听标准 HTTP 端口。server_name
:指定该虚拟主机响应的域名列表。root
:定义网站根目录。index
:设定默认索引文件顺序。try_files
:尝试按顺序查找文件,否则返回 404 错误。access_log
与error_log
:分别记录访问日志和错误日志,便于后期排查问题。
启用站点配置
将配置文件通过符号链接激活至 sites-enabled
目录:
systemctl status nginx2
删除默认站点配置(防止冲突):
systemctl status nginx3
✅ 小贴士:可通过
ls /etc/nginx/sites-enabled/
查看当前已启用的站点列表。
测试配置并重载服务
每次修改 Nginx 配