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
相关推荐
曾几何时`5 分钟前
Go(二)Goroutine及GMP模型
开发语言·后端·golang
wang09076 分钟前
自己动手写一个spring之IOC_1
java·后端·spring
老毛肚7 分钟前
jeecgboot vue Pinia 拆分01
前端·javascript·vue.js
江湖中的阿龙10 分钟前
Go语言零基础入门教程(一)环境搭建与基础入门
开发语言·后端·golang
集成显卡8 小时前
Rust实战七 |基于带 colored 颜色文字控制台的批量文件删除工具
开发语言·后端·rust
夜焱辰9 小时前
浏览器端 Agent 的文件版本管理:不用 Git,基于 OPFS + SQLite 自己造了一个
前端·人工智能
梦想的颜色9 小时前
TypeScript 完全指南(下):从类型体操到生产级配置
前端·javascript·typescript
jeffer_liu9 小时前
Spring AI 生产级实战:工具调用
java·人工智能·后端·spring·ai编程
Cosolar10 小时前
AutoGen 精通教程:从零到企业级多 Agent 系统架构师
人工智能·后端·面试