Nginx
1. Web服务概述
数字化时代,从日常浏览新闻、社交娱乐到在线购物、移动支付,再到企业数字化转型,背后都离不开Web服务支撑。
客户端到数据库的数据流向:
client --> nginx(apache) --> tomcat/php/uwsgi --> db1.1 Web服务器分类
| 类型 | 说明 | 代表软件 |
|---|---|---|
| Web服务器 | 只提供静态页面访问 | nginx、apache |
| Web应用服务器(Web中间件) | 提供动态页面访问 | tomcat(.jsp/java)、php-fpm(.php)、uwsgi(.py/python) |
很多知名互联网公司(腾讯、阿里巴巴、百度等)都在其业务中大量使用Nginx处理海量用户请求。
```bash
# 查看网站使用的Web服务器
# curl -I 域名地址 # 响应头里的 Server 字段会标明
[root@client ~]# curl -I www.sina.com
```
执行结果:
```
Server: Nginx
```
1.2 URL vs URI
- URI(Uniform Resource Identifier,统一资源标识符):广义概念,用于唯一标识互联网上资源的字符串,包含URL和URN
- URL(Uniform Resource Locator,统一资源定位符):URI的子集,不仅标识资源,还指定访问资源的具体路径/方式
- URN(Uniform Resource Name):URI的另一种形式,如书籍的ISBN
完整URI结构:
https://www.example.com:80/path/file.html?id=1#top| 组成部分 | 值 | 说明 |
|---|---|---|
| URL | https://www.example.com:80/path/file.html | 完整访问路径 |
| URN | www.example.com:80/path/file.html?id=1#top | 资源名称 |
| 协议 | https | 应用层协议 |
| 主机/域名 | www.example.com | 对应IP 192.168.18.8 |
| 端口 | 80 | 服务端口 |
/ | 网站根目录 | 发布网站的根目录 |
| path | 路径 | 子目录 |
| file.html | 访问的页面 | 真正想访问的资源文件 |
? | 分隔符 | 区分URL和参数 |
id=1 | 参数 | 传给页面内容的参数 |
#top | 锚点 | 页面内定位 |
---
2. Nginx简介
Nginx(engine x)是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的。第一个公开版本0.1.0发布于2004年10月4日,后来被美国F5公司收购。
官网:https://nginx.org/
三大功能:
| 功能 | 说明 | 同类软件 |
|---|---|---|
| HTTP服务器 | 高性能静态Web服务器 | Apache、IIS(微软)、lighttpd(德国) |
| 反向代理 | 接收客户端请求,转发到内部多个服务器,返回结果给客户端 | squid、varnish |
| 负载均衡 | 将用户请求均匀分配到多个后端服务器 | LVS、HAProxy |
2.1 正向代理 vs 反向代理
| 对比项 | 正向代理 | 反向代理 |
|---|---|---|
| 用户感知 | 用户知道自己使用了代理,需填写代理服务器IP | 用户无感知,不知道使用了代理 |
| 位置 | 放在客户端网络 | 放在服务器端网络 |
| 作用 | 代理客户端上网(科学上网) | 分发请求到后端真实服务器,隐藏真实服务器路径 |
| 场景 | 加速内网用户上网、科学上网 | 负载均衡、CDN |
Web代理分类:
| 类型 | 位置 | 作用 |
|---|---|---|
| 正向代理(桌面运维) | 客户端网络 | 加速内网用户上网速度,科学上网 |
| 透明代理(桌面运维) | 客户端网络 | 限制内网用户上网行为(如不允许访问抖音、迅雷) |
| 反向代理(运维重点) | 服务器端网络 | 分发网络请求给后端真实Web服务器、负载均衡、CDN |
专业Web代理服务器: squid、varnish
2.2 负载均衡
负载均衡技术(Load Balance,LB)原理是把用户请求分发到不同的服务器,使流量合理分配。
作用: 1. 流量分发 — 请求平均,降低单例压力 2. 安全 — 隐藏后端真实服务 3. 屏蔽非法请求(七层负载均衡)
示例:http://www.itcast.cn/images/1.jpg→ 识别为*.jpg图片 → 调度到后端的图片服务器
2.3 Nginx基本架构
Nginx架构由一个主进程(Master Process)和多个工作进程(Worker Processes)组成:
- 主进程(Master):负责管理配置文件、启动和停止工作进程、重新加载配置。像"管理者",统筹协调整个系统。
- 工作进程(Worker):负责实际处理客户端请求。多个Worker并行工作,相互独立,某个Worker出现故障不影响其他Worker。
2.4 Nginx特点
| 特点 | 说明 |
|---|---|
| 高可靠 | Master进程管理调度请求分发到Worker,一Master多Worker |
| 热部署 | 平滑升级、可以快速重载配置 |
| 高并发 | 可以同时响应更多请求,事件epoll模型,几万并发 |
| 响应快 | 尤其在处理静态文件上,sendfile机制 |
| 低消耗 | 1w个请求内存仅2~3MB |
| 分布式支持 | 反向代理、七层负载均衡,新版本也支持四层负载均衡 |
---
3. Nginx安装部署
3.1 常见安装方式
| 方式 | 说明 |
|---|---|
| yum安装 | 使用Nginx官方源(nginx.org)或EPEL源 |
| 源码编译 | 配置 + 编译 + 安装 三步走 |
3.2 包管理器安装(EPEL源)
# 安装EPEL源
[root@web01 ~]# dnf install epel-release -y
# 安装Nginx
[root@web01 ~]# dnf install nginx -y
# 验证安装,查看版本
[root@web01 ~]# nginx -v命令作用:
- 使用
dnf包管理器执行install操作,对软件包进行安装、更新、删除或查询。
执行结果:
- 成功后软件包会按指定动作完成安装、更新、删除或查询;失败时检查仓库、网络和权限。
- 成功后会显示 Nginx 配置语法正确;失败时先修复报错,再执行 reload 或 restart。
关键参数:
注意事项:
**关键参数:**
**注意事项:**注意事项:
| 命令 | 方式 | 说明 |
|---|
RPM安装目录(需背诵):
/etc/nginx/
/var/log/nginx/编译安装目录:
| 目录 | 作用 |
|---|
注意事项:
命令拆解:
| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
> | 普通 | > 是当前 echo 命令使用的参数或操作对象,作用是为当前动作指定目标或具体取值。 |
注意事项:
课上作业思考题:
} }
**注意事项:**
}注意事项:
---
Location区块用于URL规则匹配,同一个server内可以有多个location。根据用户请求的URI来执行不同的操作。
**注意事项:**
| 匹配符 | 说明 | 示例 |
|---|---|---|
| `=` | 精确匹配 | `location = /` 只匹配首页 |
| `~` | 大小写敏感正则 | `location ~ /Example/` 只匹配 `/Example/`,不匹配 `/example/` |
| `~*` | 大小写不敏感正则 | `location ~* /Example/` 同时匹配 `/Example/` 和 `/example/` |
| `^~` | 前缀优先匹配 | `location ^~ /img/` 匹配以 `/img/` 开头的所有请求 |
| `/`(无标识符) | 普通前缀匹配 | `location /` 兜底匹配 |
**符号命名解释:**
**示例:**
}
}
}注意事项:
---
**注意事项:**
多条rewrite从上到下匹配。
| 标记 | 作用 | 浏览器URL变化 |
|---|---|---|
}
}
}
}注意事项:
} }
**注意事项:**
}
}
}注意事项:
}
} }
**注意事项:**
命令拆解:
| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
/usr/local/nginx/conf/nginx.conf | 普通 | 配置文件路径,命令会读取这个文件里的配置。 |
注意事项:
}
}
**注意事项:**
}注意事项:
作用:防止自己站点中的资源(图片、音乐、视频等)被其他网站直接引用,避免带宽资源被盗用。
基本语法: } }
**注意事项:**
**完整案例:**
}
}注意事项:
参数说明:
| 参数 | 说明 |
|---|---|
itheimadevops.com | 允许来自此域名的请求 |
*.itheimadevops.com | 泛域名匹配,如 www.itheimadevops.com、bbs.itheimadevops.com |
---
**命令拆解:**
| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
| `-I` | 【普通】 | 选项 `-I`,用于改变 `curl` 的处理方式;具体效果要结合后面的值和当前动作理解。 |
| `http://192.168.88.104` | 【普通】 | 目标 URL `http://192.168.88.104`,命令会访问这个地址或从这里下载内容。 |
**注意事项:**
}注意事项:
**命令拆解:**
| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
| `-s` | 【普通】 | 选项 `-s`,用于改变 `nginx` 的处理方式;具体效果要结合后面的值和当前动作理解。 |
| `-I` | 【普通】 | 选项 `-I`,用于改变 `curl` 的处理方式;具体效果要结合后面的值和当前动作理解。 |
| `http://192.168.88.104` | 【普通】 | 目标 URL `http://192.168.88.104`,命令会访问这个地址或从这里下载内容。 |
**注意事项:**
}
}注意事项:
**注意事项:**
**案例:**
}注意事项: