Nginx

1. Web服务概述

数字化时代,从日常浏览新闻、社交娱乐到在线购物、移动支付,再到企业数字化转型,背后都离不开Web服务支撑。

客户端到数据库的数据流向:

client --> nginx(apache) --> tomcat/php/uwsgi --> db

1.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结构:

https://www.example.com:80/path/file.html?id=1#top
组成部分说明
URLhttps://www.example.com:80/path/file.html完整访问路径
URNwww.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)组成:

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

命令作用:

执行结果:

关键参数:

注意事项:


**关键参数:**

**注意事项:**

注意事项:

命令方式说明

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.combbs.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`,命令会访问这个地址或从这里下载内容。 |

**注意事项:**




    }
}

注意事项:


**注意事项:**



**案例:**
}

注意事项: