nginx
到底是什么?
高性能的的Http和反向代理web服务器,核心特点占用内存小,并发性能高
特点
跨平台:Nginx可以再大多数类unix的操作系统上编译运行,而且也存在windows版本。
nginx上手容易,配置比较简单。
高并发,性能好
稳定性也特别好,宕机的概率很低。
使用场景
-
HTTP服务器(web服务器)
性能非常高,非常注重效率,能够经受高负载的考验。
支持5W个并发连接数,CPU和内存的占用也非常低,1W个没有活动的连接才占用2.5M的内存 -
反向代理服务器
正向代理
浏览器需要配置代理
反向代理
浏览器发送请求到反向代理服务器,由反向代理服务器选择原始服务器提供服务响应结果,最终再返回给客户端浏览器。
正向代理 反向代理 向服务器端屏蔽用户信息 向浏览器(服务端)屏蔽服务器 用户使用代理服务器,访问用户指定的地址 用户直接访问代理服务器,由代理服务器匹配对应的服务器响应 需要在浏览器配置代理服务器信息 浏览器无需配置仅可以访问指定的代理服务器地址,才可获取响应
|
-
负载均衡服务器
负载均衡:
当一个请求到来的时候。在nginx的反向代理服务器,根据用户请求去找到一台原始的服务器来处理请求,这叫做反向代理。那么在存在多台目标服务器的情况下,匹配那一台服务器来处理请求的过程即为负载均衡。
-
动静分离
常用命令
主要命令:
./nginx 启动nginx
./nginx -s stop 终止nginx(当然也可以找到nginx进程号,然后使用 kill -9 杀掉nginx的进程)
./nginx -s reload 重新加载nginx的配置文件
核心配置文件解读
最大并发量计算
正常情况下: worker_connections * worker_process
反向代理下: worker_connections * worker_process / 4 (客户端与代理服务器占用俩个链接,代理服务器与目标服务 器占用俩个链接)
nginx 的conf/nginx.conf 配置文件分为三大块: 全局块、event块 和 http块
-
全局块
此处配置影响的nginx服务器的整体运行,比如worker进程的数量、错误日志的位置等。
-
event块
主要影响nginx服务器与用户的网络连接,比如worker_connections = 1024,标识每一个worker_process支持的最大连接数为1024。当前服务器的请求处理的最大并发量为 worker_connections * worker_process
-
http块
配置关于不同场景的配置
负载均衡策略
-
轮询
默认策略,每个请求按时间顺序逐一分配到不同的服务器,如果某一服务器下线,可以自动删除
upstream {server_name} { server ip:port; server ip:port; ... }
-
weight
weight代表权重,默认每个负载的服务器都为1,权重越高那么被分配的请求越多(用于服务器请求不均衡的场景)
upstream {server_name} { server ip:port weight=1; server ip:port weight=2; ... }
-
ip_hash
每个请求按照ip的hash结果分配,每一个客户端的请求会固定的分配到同一台目标服务器处理,可以解决session问题
upstream {server_name} { ip_hash; server ip:port; server ip:port; ... }
nginx底层进程机制分析
nginx启动后,以Deamon的多进程方式在后台运行,包括一个Master进程和多个Worker进程,Master进程是leader,Worker为实际的业务线程。
-
master进程
主要管理worker进程
- 接收外界信号向个worker进程发送信号(./nginx -s reload – 将worker杀掉重新加载配置文件并启动新的进程)
- 监控worker的进程的运行状态,当worker进程异常退出后Master进程会自动重启worker进程等
-
worker进程
worker进程具体处理网络请求,多个worker之间是对等的,他们同等竞争来自客户端的请求,各个进程之间是独立的。一个请求只能在一个worker进程处理,一个worker进程不能处理其他进程的请求。worker的进程数可设置,一般设置与机器CPU的核数一致。
程
worker进程具体处理网络请求,多个worker之间是对等的,他们同等竞争来自客户端的请求,各个进程之间是独立的。一个请求只能在一个worker进程处理,一个worker进程不能处理其他进程的请求。worker的进程数可设置,一般设置与机器CPU的核数一致。