Nginx 体系化之虚拟主机分类及配置实现

Nginx,这款备受推崇的高性能 Web 服务器,以其强大的性能和灵活的配置而广受欢迎。在实际应用中,虚拟主机是一项重要的功能,允许我们在单个服务器上托管多个网站。本文将深入探讨 Nginx 虚拟主机的分类和配置实现,帮助您构建一个高效多站点托管平台。

虚拟主机的分类

虚拟主机是一种将单个服务器划分成多个独立的网站托管环境的技术。Nginx 支持三种主要类型的虚拟主机:

基于 IP 地址的虚拟主机(常用)

这种类型的虚拟主机是通过不同的 IP 地址来区分不同的网站。每个 IP 地址绑定到一个特定的网站或应用程序。这种虚拟主机适用于需要在同一服务器上为每个网站提供独立的资源和配置的场景。

基于域名的虚拟主机(常用)

基于域名的虚拟主机是根据不同的域名来区分不同的网站。多个域名可以共享同一个 IP 地址,并通过 Nginx 的配置来分发流量到正确的网站。这种虚拟主机适用于在单个服务器上托管多个域名或子域名的情况。

基于多端口的虚拟主机(不常用)

基于多端口的虚拟主机是一种将单个服务器上的多个网站隔离开来的方式。每个网站使用不同的端口号进行访问,从而实现隔离。这种方法特别适用于那些无法使用不同域名或 IP 地址的情况,或者需要在同一服务器上快速托管多个网站的需求。

虚拟主机配置实现

配置文件结构

Nginx 的配置文件通常位于 /etc/nginx/nginx.conf,在该文件中可以找到 http 块。在 http 块内,可以配置全局设置和默认行为。每个虚拟主机都需要一个 server 块来定义其配置。 使用 include 指令简化配置文件,通常情况下将基于 server 的配置文件放到一个文件夹中,由 include 引用即可

bash 复制代码
http{
    include /usr/nginx/server/*.conf # 表示引用 server 下的配置文件
}

基于 IP 地址的虚拟主机实现

创建 IP 配置文件

/usr/nginx/server/ 中创建一个新的配置文件,例如 /usr/nginx/server/ip.conf

配置 IP

在新的配置文件中,为每个网站创建一个 server 块,并在其中指定监听的端口号和网站的根目录。例如:

bash 复制代码
# 基于 192.168.1.10 代理到百度网站
server {
    listen 192.168.1.10:80;
    server_name www.baidu.com;
    root /var/www/baidu;
    index index.html;
}
# 基于 192.168.1.11:80 代理到 bing 网站
server {
    listen 192.168.1.11:80;
    server_name www.bing.com;
    root /var/www/bing;
    index index.html;
}

最佳场景实践

  1. 资源隔离: 每个网站都有独立的 IP 地址、资源和配置,避免了资源冲突和相互影响。
  2. 安全性提升: 基于 IP 地址的虚拟主机可以增强安全性,减少不同网站之间的潜在风险。
  3. 独立访问: 每个网站都有独立的 IP 地址,可以实现独立的访问控制和限制。
  4. 多租户托管: 基于 IP 地址的虚拟主机适用于多租户托管场景,为不同客户提供独立环境。

基于域名的虚拟主机实现

创建 IP 配置文件

/usr/nginx/server/ 中创建一个新的配置文件,例如 /usr/nginx/server/domain.conf

配置 IP

在新的配置文件中,为每个网站创建一个 server 块,并在其中指定监听的域名和网站的根目录。例如:

bash 复制代码
# 通过 www.baidu.com 转发到 80
server {
    listen 80;
    server_name www.baidu.com;
    root /var/www/baidu;
    index index.html;
}

# 通过 www.bing.com 转发到 80
server {
    listen 80;
    server_name www.bing.com;
    root /var/www/bing;
    index index.html;
}

最佳场景实践

基于域名的虚拟主机为多站点托管提供了高度的定制性和灵活性:

  1. 品牌差异化: 不同域名的虚拟主机允许您为不同品牌或应用提供独立的网站定制,提升用户体验。
  2. 定向流量: 基于域名的虚拟主机可以将特定域名的流量引导至相应的网站,实现定向流量管理。
  3. 子域名托管: 可以将不同子域名配置为独立的虚拟主机,为多个应用或服务提供托管。
  4. SEO 优化: 每个域名的虚拟主机可以针对不同的关键词进行 SEO 优化,提升搜索引擎排名。

基于多端口的虚拟主机

创建多端口配置文件

/usr/nginx/server/ 中创建一个新的配置文件,例如 /usr/nginx/server/domain.conf

配置 IP

在新的配置文件中,为每个网站创建一个 server 块,并在其中指定监听的域名和网站的根目录。例如:

bash 复制代码
server {
    listen 8081;
    server_name www.baidu.com;
    root /var/www/baidu;
    index index.html;
}

server {
    listen 8082;
    server_name www.bing.com;
    root /var/www/bing;
    index index.html;
}

最佳场景实践

基于多端口的虚拟主机为多站点托管提供了更多的灵活性和选择:

  1. 快速设置: 使用多端口可以快速设置多个网站,适用于临时性或开发环境。
  2. 资源隔离: 每个网站都有独立的端口和配置,避免了资源冲突和相互干扰。
  3. 开发和测试: 多端口虚拟主机适用于开发和测试环境,每个开发者可以使用不同的端口进行开发和调试。
  4. 灰度发布: 基于多端口的虚拟主机可以实现灰度发布,逐步引导流量至新版本网站。

重载配置

在添加、修改或删除多端口虚拟主机配置后,使用以下命令重载 Nginx 配置,使更改生效:

bash 复制代码
nginx -s reload
相关推荐
恋猫de小郭2 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
牛奔3 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
想用offer打牌8 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
崔庆才丨静觅9 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60619 小时前
完成前端时间处理的另一块版图
前端·github·web components
KYGALYX10 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了10 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅10 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅10 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
爬山算法10 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate