前言:
目录:
一、Nginx是什么
二、Nginx的反向代理
三、Nginx的负载均衡
四、Nginx的常用命令
一、Nginx是什么
1.1Nginx是一个高性能的开源Web服务器和反向代理服务器,也可以用作负载均衡器、HTTP缓存服务器和邮件代理服务器。
1.2其采用了事件驱动和异步非阻塞的方式,能高效处理大量并发连接。
1.3其代码量小,内存占用低。能在低配置的硬件上高效运行。
1.4基于稳定的事件驱动架构开发,能够有效避免由于代码错误或者第三方库问题导致的崩溃。高可靠性。
1.5提供了丰富的模块,包括http模块,SSL/TLS加密模块,负载均衡模块等,用户可以根据需求灵活启用或禁用模块。
1.6其配置文件采用类似c语言的语法,灵活。
1.7其支持在不停止服务的情况下重新加载配置文件或者更新软件版本,实现零停机时间部署(热部署)。
1.8其支持在多种操作系统上运行,包括linux和windows
主要功能:
-
http服务器:作为静态和动态网页的http服务器,处理客户端的http请求。
-
反向代理:将客户端的请求转发到后端的一个或多个服务器上,隐藏后端服务器的真正ip地址,提高安全性。
-
负载均衡:在多个后端服务器之间分配请求,根据负载均衡算法(轮询、权重等)提高应用的可用性和扩展性。
-
http缓存:缓存静态内容和后端服务器的响应,减少后端服务器的负载,提高响应速度。
-
SSL/TSL终端代理:支持SSL/TLS协议,为客户端提供安全的https访问。
-
静态内容服务:高效处理静态文件,如图片、视频、css和js文件。
-
压缩:支持Gzip压缩,减少传数据的大小,加快页面加载速度。
-
邮件代理:支持SMTP、POP3和IMAP协议,可以作为邮件代理服务器。
二、Nginx的反向代理
无代理:浏览器->服务区
正向代理:浏览器->代理->其他服务器(翻墙)
反向代理:浏览器->nginx->服务器
反向代理详解:当我们访问电商平台时,他们是多服务器的,但服务器之间的session不共享(而现在我们都是单点登录),nginx能够实现登录一次访问所有服务器,这就是反向代理。对外暴露的就是代理服务器地址,隐藏了真实服务器地址。
三、负载均衡
负载均衡的模式:
- 轮询(Round Robin) 描述: 默认算法,按顺序将请求分配到每个服务器。
配置示例:
c
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
- 加权轮询(Weighted Round Robin) 描述: 在轮询的基础上,为每个服务器分配一个权重,权重越高,分配的请求越多。
配置示例:
c
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=2;
}
- IP 哈希(IP Hash) 描述: 根据客户端 IP 地址的哈希值分配请求,确保同一客户端的请求总是分配到同一服务器。
配置示例:
c
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
- 最少连接(Least Connections) 描述: 将请求分配到当前连接数最少的服务器。
配置示例:
c
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
- 加权最少连接(Weighted Least Connections) 描述: 在最少连接的基础上,考虑服务器的权重。
配置示例:
c
upstream backend {
least_conn;
server backend1.example.com weight=3;
server backend2.example.com weight=2;
}
- 随机(Random) 描述: 随机选择一个服务器处理请求。
配置示例:
c
upstream backend {
random;
server backend1.example.com;
server backend2.example.com;
}
- 加权随机(Weighted Random) 描述: 在随机选择的基础上,考虑服务器的权重。
配置示例:
c
upstream backend {
random;
server backend1.example.com weight=3;
server backend2.example.com weight=2;
}
- 基于响应时间的负载均衡(Least Time) 描述: 将请求分配到响应时间最短的服务器。
配置示例:
c
upstream backend {
least_time header;
server backend1.example.com;
server backend2.example.com;
}
- 基于 URI 的哈希(URI Hash) 描述: 根据请求 URI 的哈希值分配请求,确保同一 URI 的请求总是分配到同一服务器。
配置示例:
c
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
}
- 基于 Cookie 的负载均衡(Sticky Cookie) 描述: 使用 Cookie 将客户端请求绑定到特定服务器。
配置示例:
c
upstream backend {
sticky cookie srv_id expires=1h domain=.example.com path=/;
server backend1.example.com;
server backend2.example.com;
}
四、常用命令
linux
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加载配置文件 如果我们修改了配置文件,就需要重新加载。
ps aux|grep nginx 查看nginx进程
nginx -t 检查 Nginx 配置文件的语法是否正确
tail -f /var/log/nginx/error.log 查看错误日志