在 Linux 中,Nginx 虚拟主机(Virtual Host)是通过 Server Blocks 来实现的。这些 Server Blocks 允许在一台物理服务器或虚拟服务器上托管多个网站或域名。以下详细介绍 Nginx 虚拟主机的类型、配置方法和常见用途:
1. Nginx 虚拟主机的类型
Nginx 支持以下几种类型的虚拟主机:
-
基于名称的虚拟主机(Name-based Virtual Hosts):
- 不同的虚拟主机共享相同的 IP 地址,通过域名区分。
- 适用于托管多个域名或子域名。
-
基于 IP 的虚拟主机(IP-based Virtual Hosts):
- 每个虚拟主机绑定到不同的 IP 地址。
- 适用于需要独立 IP 的场景(如 SSL/TLS 配置)。
-
基于端口的虚拟主机(Port-based Virtual Hosts):
- 不同的虚拟主机监听不同的端口。
- 适用于开发环境或特定服务的隔离。
2. 配置 Nginx 虚拟主机
配置虚拟主机时,通常需要以下步骤:
2.1 创建虚拟主机配置文件
-
在
/etc/nginx/sites-available/
目录下创建一个新的虚拟主机配置文件,文件名通常为域名。sudo nano /etc/nginx/sites-available/example.com
-
在配置文件中定义
server
块,指定域名、根目录、日志文件等:server {listen 80; # 监听端口server_name example.com www.example.com; # 域名root /var/www/example.com; # 网站根目录index index.html index.htm; # 默认索引文件location / {try_files $uri $uri/ =404; # 文件处理逻辑}# 日志文件路径access_log /var/log/nginx/example.com.access.log;error_log /var/log/nginx/example.com.error.log; }
2.2 启用虚拟主机
-
创建符号链接,将配置文件链接到
/etc/nginx/sites-enabled/
:sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
-
测试 Nginx 配置文件是否有语法错误:
sudo nginx -t
-
重新加载 Nginx 以应用更改:
sudo systemctl reload nginx
3. 常见虚拟主机配置示例
3.1 多域名配置
可以为多个域名配置不同的 server
块:
server {listen 80;server_name example.com www.example.com;root /var/www/example.com;
}server {listen 80;server_name blog.example.com;root /var/www/blog.example.com;
}
3.2 子域名配置
子域名可以作为独立的虚拟主机:
server {listen 80;server_name subdomain.example.com;root /var/www/subdomain.example.com;
}
3.3 反向代理配置
将请求转发到后端服务:
server {listen 80;server_name api.example.com;location / {proxy_pass http://backend-server:3000;}
}
3.4 SSL 配置
为虚拟主机启用 HTTPS:
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;location / {try_files $uri $uri/ =404;}
}
4. 虚拟主机的优势
- 资源高效利用:多个网站共享一台服务器,节省硬件成本。
- 灵活性:每个虚拟主机可以独立配置,互不影响。
- 扩展性:易于添加或修改虚拟主机。
综上所述,通过以上配置,您可以在一台服务器上托管多个网站,每个网站都可以独立配置和管理。这使得 Nginx 成为托管多个虚拟主机的理想选择。