Nginx
什么是Nginx?
一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP等服务
特点:稳定性好,很少宕机、并发能力很强,可以支持5w个并发连接
作用
-
反向代理
-
负载均衡
-
动静分离
反向代理
在了解反向代理之前,先说一下正向代理。
正向代理指客户端通过代理服务器来访问其他服务器资源的方式,正向代理代理的是客户端(用户)的请求,它充当客户端和目标服务器之间的中介。客户端知道代理的存在。就比如平时“翻墙”使用的VPN、梯子
用户客户端 → 正向代理服务器 → 目标网站→ 正向代理服务器 → 用户客户端
反向代理指服务器端设置的代理服务器,用于接受客户端的请求并将其转发到实际的后端服务器上。反向代理代理的是服务器端,它充当目标服务器和客户端之间的中介。客户端不知道反向代理的存在
用户客户端 → 反向代理服务器 → 后端服务器组(服务器1、服务器2、服务器3)→ 反向代理服务器 → 用户客户端
负载均衡
负载均衡就是将客户端发送的请求分配到多个服务器,以起到优化资源使用、提高系统性能的可靠性,主要有以下几种办法
-
轮询:依次循环访问多台服务器
-
加权轮询:请求优先访问权重比较重的服务器
-
源地址哈希(iphash):根据客户端的 IP 地址计算哈希值,并将请求分配给特定的服务器,保证同一个ip哈希后打到固定服务器上
-
最小连接数(least_conn):将请求分配给当前连接数最少的服务器
动静分离
Nginx 可以将一动态资源和静态资源分别交给不同的服务器,从而提高性能和可扩展性
配置Nginx
配置ngin.conf 文件
conf文件主要分三个部分
-
全局配置
-
Events 配置
-
HTTP配置
-
HTTP配置
-
HTTPS配置
-
负载均衡
-
Server配置
-
其中
全局设置:包括用户、工作进程数量、PID 文件路径等。
HTTP 块:配置 HTTP 服务器的全局设置,包括 MIME 类型、日志、缓存、压缩等。
Server 块:定义虚拟主机的配置,如域名、根目录、请求处理方式等。
Events 块:配置事件处理相关的设置,如连接数限制和事件模型。
这里我们来演示一下如何配置负载均衡和反向代理
http { # 定义上游服务器组 upstream my_backend { server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=2; server 127.0.0.1:8082 weight=3; } server { listen 80; server_name example.com; location / { proxy_pass http://my_backend; # 反向代理到上游服务器组 ... } } }
解释:这里我们定义了反向代理url:Example Domain,和反向代理后的三台服务器:127.0.0.1:8080(比重为1/6)、127.0.0.1:8081(比重为2/6)、127.0.0.1:8082(比重为3/6),这样当我们访问Example Domain时,Nginx会根据权重分别将访问发送到三台服务器中
为什么Nginx性能这么高?
-
异步非阻塞
-
它跟Redis一样,使用I/O多路复用,它分为一个主进程,多个工作进程,每个工作进程可以处理多个请求,每进来一个请求,会有一个worker进程去处理,属于网络io密集型。异步非阻塞事件处理机制:运用了epoll模型,可处理2-3万并发连接数;
-
用一个线程进行监听,谁有请求,就处理谁的回调方法,这样也避免了多线程直接上下文切换。
-
它是用一个线程进行监听多个输入、输出流,谁有数据去处理谁,它并不是为每个输入、输出流创建独立的线程,去处理任务,一个线程可以监听多个描述符(socket)。
怎么配置Nginx配置高可用性?
Nginx本身挂掉的概率就非常小,如果真的不放心,可以采取以下策略
-
在小项目中,可以选择将一台Nginx转发到多台Nginx上
-
在大的项目中,可以准备两台Nginx,两台安装Keepalived服务,配置相应的Keepalived.conf文件,当一台Nginx宕机后,可以通过虚拟IP来自动切换到另一台服务器上