Nginx基本原理说明
Posted 分享录
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx基本原理说明相关的知识,希望对你有一定的参考价值。
nginx基本原理说明
nginx基本概念
(1)反向代理
想要了解反向代理,我们需要先了解什么是正向代理
一,正向代理:如果把局外网的Internet想象成一个巨大的资源库,则局域网中的客户端(浏览器)要访问Internet(如www.baidu.com),则需要通过代理服务器来访问,这种代理服务器就称为正向代理,如下图
了解了什么正向代理,现在我们来看看什么是反向代理
(2)负载均衡
客户端发送多个请求服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。这种架构模式对于早期的系统相对单一,并发较少的情况下比较适合,但随着信息数量的不断增加以及业务的复杂度增加,这种模式会造成服务器相应客户端的请求日益缓慢,甚至崩溃。
负载均衡: 单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先先请求集中到单个服务器上的情况改为分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
如图,假设客户端一次发送15个请求过来,反向代理服务器就会将请求按策略(如轮询,每个服务器请求一次)分发给不同的服务器。
(3)动静分离
动静分离: 为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。简单来说就是把动态跟静态请求分开。
nginx的工作过程
master & worker
在nginx启动后,会有一个master进程和多个worker进程,master进程主要用来管理worker进程,包括:接受信号,将信号分发给worker进程,监听worker进程工作状态,当worker进程退出时(非正常),启动新的worker进程。基本的网络事件会交给worker进程处理。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的 。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的 。
2.worker进程是如何处理请求的
3.当master接收到重新加载的信号会怎么处理(./nginx -s reload)
master会重新加载配置文件,然后启动新的进程,使用的新的worker进程来接受请求,并告诉老的worker进程他们可以退休了,老的worker进程将不会接受新的请求,如果在重新加载的时候,老的worker正好争抢到了请求,老的worker将不会和新的worker进行争抢,等老的worker进程处理完手中正在处理的请求就会退出。
4.master-workers的机制的好处
(1)可以是使用nginx -s reload 热部署,利用nginx进行热部署操作
(2)对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多,可以互相之间不会影响,一个进程退出后,其他进程还在工作,服务不会中断,master进程则很快启动新的worker进程。当然,worker进程的一场退出,肯定是程序有Bug了,一场退出,会导致当前worker上的所有请求失败,不过不会影响到所有的请求,所以降低了风险。
5.需要设置多少个worker.
Nginx通redis类似都采用了IO多路复用机制,每个worker都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即便是千万个请求也不再话下。每个worker的线程可以把一个cpu的性能发挥极致。所以worker数和服务器的cpu数相等最为适宜。设置少了会浪费cpu,设置多了会造成cpu频繁切换上下文带来的损耗。
#设置worker数量
worker_processes 4
#worker 绑定cpu ( 4 worker 绑定 4 cpu)
6.连接数worker_connection
这个值是表示每个worker进程所能建立连接的最大值,所以,一个nginx.能建立的最大连接数,应该是worker_connections * worker_processes。
####发送请求,占用worker的几个连接数?
答:2 或者 4个
当访问静态资源:请求连接和返回数据 2个
当访问非静态,如通过tomcat访问数据库 :请求连接worker,请求访问tomcat,返回数据给worker和 worker返回数据到客户端 4 个
####nginx又一个master,四个worker,每个worker支持最大的连接数据是1024,支持最大并发数是多少?
答:41024/2 或者 41024/4
这里说的是最大连接数,对于HTTP请求本地资源来说,能够支持的最大并发数量是worker_connections * worker_processes,
如果是支持http1.1的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是:worker_connections * worker_processes /2,
而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connections **worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
------------END-----------
更多原创文章请扫描上面(微信内长按可识别)二维码访问我的个人网站(https://www.xubingtao.cn),或者打开我的微信小程序: 可以评论以及在线客服反馈问题,其他平台小程序和APP请访问:https://www.xubingtao.cn/?p=1675。祝大家生活愉快!
以上是关于Nginx基本原理说明的主要内容,如果未能解决你的问题,请参考以下文章
深入浅出学习透析Nginx服务器的基本原理和配置指南「负载均衡篇」