在搭建网站或部署多个Web应用时,你可能会遇到一个问题:一台服务器如何同时运行多个网站?这时候,Nginx虚拟主机和反向代理功能就派上用场了。本教程将从零开始,带你一步步配置Nginx虚拟主机,实现基于域名的多站点访问,并通过反向代理将请求转发到后端服务。
什么是Nginx虚拟主机?
Nginx虚拟主机(Virtual Host)是指在一台物理服务器上,通过Nginx配置多个独立的网站,每个网站可以拥有自己的域名、根目录和访问规则。这不仅能节省服务器成本,还能提高资源利用率。
准备工作
- 一台安装了Nginx的Linux服务器(如Ubuntu/CentOS)
- 至少两个域名(或本地hosts文件模拟)
- 基本的命令行操作能力
步骤一:创建网站目录
假设我们要部署两个网站:site1.example.com 和 site2.example.com。首先,在服务器上创建对应的目录:
$ sudo mkdir -p /var/www/site1$ sudo mkdir -p /var/www/site2
然后为每个目录添加一个简单的测试页面:
$ echo "<h2>欢迎访问 Site 1</h2>" | sudo tee /var/www/site1/index.html$ echo "<h2>欢迎访问 Site 2</h2>" | sudo tee /var/www/site2/index.html
步骤二:配置Nginx虚拟主机
进入Nginx的站点配置目录(通常为 /etc/nginx/sites-available/),创建两个配置文件:
$ sudo nano /etc/nginx/sites-available/site1.conf
写入以下内容:
server { listen 80; server_name site1.example.com; root /var/www/site1; index index.html; location / { try_files $uri $uri/ =404; }} 同样地,为 site2 创建配置文件:
$ sudo nano /etc/nginx/sites-available/site2.conf
server { listen 80; server_name site2.example.com; root /var/www/site2; index index.html; location / { try_files $uri $uri/ =404; }} 步骤三:启用虚拟主机
创建符号链接,将配置文件链接到 sites-enabled 目录:
$ sudo ln -s /etc/nginx/sites-available/site1.conf /etc/nginx/sites-enabled/$ sudo ln -s /etc/nginx/sites-available/site2.conf /etc/nginx/sites-enabled/
检查Nginx配置是否正确:
$ sudo nginx -t
如果显示“syntax is ok”,则重新加载Nginx:
$ sudo systemctl reload nginx
步骤四:配置反向代理(进阶)
如果你有一个后端服务(比如运行在3000端口的Node.js应用),你可以通过Nginx反向代理将域名请求转发给它。修改 site1.conf 如下:
server { listen 80; server_name api.example.com; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }} 这样,访问 http://api.example.com 就会自动代理到本地3000端口的服务。这是实现Web服务器配置灵活性的关键技巧。
步骤五:本地测试(无真实域名时)
如果没有真实域名,可以在本地电脑的 hosts 文件中添加映射:
# Windows: C:\Windows\System32\drivers\etc\hosts# macOS/Linux: /etc/hosts你的服务器IP site1.example.com你的服务器IP site2.example.com
保存后,浏览器访问 http://site1.example.com 即可看到对应网站。
常见问题排查
- 403 Forbidden:检查目录权限,确保Nginx用户(通常是www-data或nginx)有读取权限。
- 404 Not Found:确认root路径和index文件是否存在。
- 配置未生效:记得执行
nginx -t检查语法,并重载服务。
总结
通过本教程,你已经掌握了如何使用Nginx虚拟主机在同一台服务器上托管多个网站,并学会了如何配置反向代理来转发请求。这些技能对于运维人员、开发者乃至个人站长都至关重要。无论你是想节省服务器成本,还是构建微服务架构,域名绑定与Web服务器配置都是基础中的基础。
现在,动手试试吧!你会发现Nginx不仅强大,而且配置起来非常直观。

