一. 关于 Nginx
1. 什么是 nginx?
Nginx(发音同engine x)是一款轻量级的Web服务器、反向代理服务器和负载均衡器,由俄罗斯程序员Igor Sysoev开发。Nginx的设计目标是高性能、高并发、高可靠、低资源消耗,可以作为Web服务器、反向代理服务器和负载均衡器使用
其特点包含:轻量级,高并发,反向代理,社区,安全性,应用广泛
2. 主要功能
- 静态文件服务:高效处理 html,css,js,图片等静态资源
- 反向代理:将客户端请求转发到后端服务器
- 负载均衡:支持轮询,最少连接,IP 哈希等多种策略,分发流量到多台后端服务器
- SSL / TLS 支持:集中处理 HTTPS 加密
- URL 重写与重定向:灵活的 rewrite 规则,支持正则表达式
- WebSocket:支持长连接代理
- HTTP 缓存:可缓存后端响应,减轻后端压力,加速用户访问
- 访问控制与安全:基于 IP 的访问限制,认证,防攻击等
- 等等
3. 能做什么?(应用场景)
- Web 服务器:替代 Apache,直接托管静态网站或作为前端入口
- 反向代理与负载均衡:为微服务框架提供统一的入口,分发请求到多个后端实例
- API 网关:对后端 API 进行路由,鉴权,限流,日志记录
- HTTPS 网关:集中管理 SSL 证书,实现全站 HTTPS
- 缓存服务器:缓存 CDN,动态页面,降低源站负载
- 动静分离:将静态请求直接由 Nginx 处理,动态请求转发至应用服务器
- Docker / K8s 入口控制器:作为 Ingress Controller 暴漏容器服务
- WebSocket 代理:支撑实时通信应用
4. 相关概念简介
这里优先介绍下代理与负载均衡
4.1 正向代理&反向代理
正向代理主要是为了客户端服务,而反向代理则是为了服务器端的服务优化和安全考虑,都可以明显提高数据传输的效率
正向代理(Forward Proxy)
- 位于客户端和目标服务器之间,主要用途是 代替客户端访问外部网络,隐藏客户端的真实 IP 地址,提高访问速度,突破访问控制 等等
- 客户端主动使用代理服务器,服务端不知道实际发起请求的客户端
- 常用于公司内部网络,通过一个或多个代理服务器访问互联网资源,以节省带宽,提高访问速度或进行内容过滤
由于防火墙的原因,我们并不能直接访问 google,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。这里你可以发现,正向代理 ” 代理 “ 的是客户端,而且用户是知道目标的,而目标不知道客户端是通过 VPN 来访问的
反向代理(Reverse Proxy)
- 位于服务器和客户端之间,主要作用于服务器端的负载均衡,缓存静态内容,加密和SSL加速,安全防护等
- 服务器主动使用代理服务器,客户端不知道实际提供服务的服务端
- 常用于网站后端,,将客户端的请求转发到内部服务器,然后响应返回给客户端,对外表现为统一的服务地址
当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是无感的。
正向代理和反向代理的关系示意图如下:
无论是正向代理还是反向代理,都适用 Cache(缓存)技术。比如反向代理服务器,可以缓存一些从服务端取到的实时性要求不太高的数据,当客户端访问已缓存的数据且没有过期,就会 Cache 命中,不用再重复去服务端去获取,减少响应等待时间。
4.2 负载均衡
负载均衡(load balance),意思就是将负载(工作任务,访问请求)进行 平衡,分摊到多个操作单元 (服务器,组件)上进行执行,是 达到高性能,解决单点故障,增加扩展性 的终极解决方案
比如做高铁,其中一节高铁排队的人很多,里面也很拥堵。这时会有工作人员叫你们在其他入口进去。那么这个工作人员就是负责负载均衡的
为了提升网站的各方面能力,我们一般会把多台机器组成一个集群对外提供服务。然而,一般网站对外提供的访问入口都是一个。比如 www.taobao.com ,当用户输入网址的时候如何将用户的请求分发到集群中不同的机器上呢?这就是负载均衡在做的事情
如下图所示,代理就是 nginx 服务器,接收到请求后,分配给服务集群:
七层模型:1.物理层,2.数据链路层,3.网络层,4.传输层,5.会话层,6.表示层,7.应用层
根据负载均衡技术是现在 OSI 七层模型的不同层次,可以给负载均衡分类。常见的实现方式中,主要在 2,3,4,7 做文章。所以,工作在应用层的负载均衡,我们通常称为七层负载均衡,其他类此。
以上大致分为以下几种,最常用的是第四层和第七层:
- 二层负载均衡(不同的 MAC)
负载均衡服务器对外依然提供一个 VIP(虚 IP),集群中不同的机器采用相同 IP 地址,但是机器的 MAC 地址不一样。当负载均衡服务器接受到请求之后,通过改写报文的目标 MAC 地址的方式将请求转发到目标机器实现负载均衡。
- 三层负载均衡(不同的 IP)
和二层负载均衡类似,负载均衡服务器对外依然提供一个 VIP(虚 IP),但是集群中不同的机器采用不同的 IP 地址。当负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过 IP 将请求转发至不同的真实服务器。
- 四层负载均衡(IP + Port 组合)
四层负载均衡工作在 OSI 模型的传输层,由于在传输层,只有 TCP/UDP 协议,这两种协议中除了包含源 IP、目标 IP 以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。
- 七层负载均衡
七层负载均衡工作在 OSI 模型的应用层,应用层协议较多,常用 http、radius、dns 等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个 Web 服务器的负载均衡,除了根据 IP 加端口进行负载外,还可根据七层的 URL、浏览器类别、语言来决定是否要进行负载均衡。
Nginx:主要用来做七层负载均衡。Nginx 是一个网页服务器,它能反向代理 HTTP, HTTPS, SMTP, POP3, IMAP 的协议链接,以及一个负载均衡器和一 个HTTP 缓存。
二. windows系统下安装Nginx及简单使用过程
三种方案
- windows 本地环境
- Linux 服务器(真正上线用)
- Docker(最推荐)
2.1. Windows 安装 Nginx(适合本地测试)
网址:nginx.org/
2.1.1 下载 nginx
官网下载,在稳定版本,选择 nginx-windows(zip) 下载
2.1.2 解压
比如,放到 :
C:\software\nginx
目录如下:
nginx/
├── conf/
├── contrib/
├── html/
├── logs/
├── temp/
└── nginx.exe
- conf:nginx 配置文件目录,包含 nginx.conf 等
- contrib:贡献脚本或工具
- docs:nginx 文档目录
- html:静态 html 文件目录,存放默认的 index.html 等
- logs:nginx 日志目录,包括 access.log,error.log等
- temp:临时文件目录,如存放客户端请求体,代理缓存等
- nginx.exe:nginx 主程序可执行文件
2.1.3 启动
打开 cmd,
C:\software\nginx>start nginx
2.1.4 测试
在浏览器访问 http://localhost ,看到如下欢迎页面即安装成功
2.1.5 停止
在 cmd,
C:\software\nginx>nginx -s stop
stop不行,就直接结束所有 Nginx 进程,
taskkill /f /im nginx.exe
2.2 Linux 安装(真正部署用🔥)
2.2.1 Ubuntu / Debian
安装
apt update apt install nginx -y
启动
systemctl start nginx systemctl enable nginx
访问
2.2.2 CentOS / Rocky
安装
yum install nginx -y systemctl start nginx
检查状态
systemctl status nginx
2.3 Docker 安装(强烈推荐🔥🔥🔥)
2.3.1 下载镜像
拉取最新镜像版本:docker pull nginx:latest
拉取特定版本:docker pull nginx:1.24.0
检查是否成功:docker images
2.3.2 运行容器
docker run -d \
--name nginx \
-p 80:80 \
-v /your/nginx.conf:/etc/nginx/nginx.conf \
nginx
2.3.3 挂载配置
docker run -d \
--name nginx \
-p 80:80 \
-v /your/nginx.conf:/etc/nginx/nginx.conf \
nginx
2.3.4 运行测试
在浏览器访问 http://localhost