JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Nginx不归路:架构基础篇

wys521 2024-09-07 03:07:04 精选教程 51 ℃ 0 评论

一、nginx的作用

webserver反向代理服务器负载均衡

二、初探nginx架构

多进程模式 支持手动关闭后台模式,让nginx在前台运行,通过配置取消master进程,使nginx以单进程方式运行nginx启动后,会有一个master进程和多个worker进程master进行主要用来管理worker进程包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程网络事件放在worker进程中多个worker进程对等,同等竞争来自客户端的请求,各进程互相之间是独立的一个请求只能在一个worker进程中处理一个worker进程不能处理其他进程的请求worker进程数可以设置,一般设置为与机器cpu核数相同nginx -s reloadnginx从容重启:首先master进程在接到信号后,会先重新加载配置文件,然后再启动新的worker进程,并向所有老的worker进程发送信号,告诉他们可以光荣退休了。新的worker在启动后,就开始接收新的请求,而老的worker在收到来自master的信号后,就不再接受新的请求,并且在当前进程中的所有未处理完的请求处理完成后,再退出2.1、nginx进程模型

每个worker进程fork master进程(在master进程完成建立好listen的socket之后)为保证只有一个worker进程处理这个请求,在worker注册listenfd事件前抢accept_mutex,抢到的注册事件读事件里调用accept接受该链接,读取请求,解析请求,处理请求,产生数据并返回,断开连接该模型好处独立进程不加锁,省事相互之间不影响,服务不中断处理事件异步非阻塞方式处理进程非阻塞:事件没有准备好,马上返回EAGAIN,告诉你,事件还没准备好呢,你慌什么,过会再来吧。好吧,你过一会,再来检查一下事件,直到事件准备好了为止,在这期间,你就可以先去做其它事情,然后再来看看事件好了没事件的三种类型:网络事件、信号、定时器

三、nginx基础概念

3.1、connection

一个nginx的最大连接数 worker_connections * worker_processes对于HTTP请求本地资源来说,能够支持的最大并发数量是worker_connections * worker_processesHTTP作为反向代理来说,最大并发数量应该是worker_connections * worker_processes/2 (客户端的链接和后端服务的链接)accept_mutex 选项:获得了accept_mutex的进程才会去添加accept事件控制进程是否添加accept时间避免有的进程有空闲链接,没有处理机会,有的进程没有空闲链接,链接被丢弃`ngx_accept_disabled`的变量来控制是否去竞争`accept_mutex`锁3.2、request

ngx_http_request_t是对一个http请求的封装,用来保存解析请求与输出响应相关的数据从ngx_http_init_request开始,这个函数设置读事件ngx_http_process_request_line来处理请求行,通过ngx_http_read_request_header来处理请求头以请求行中的host域来查找虚拟机解析到的数据会存储在ngx_http_request_t结构中nginx解析到两个回车换行符表示请求头结束,调用ngx_http_process_request来处理请求ngx_http_process_request设置处理函数为ngx_http_request_handler然后调用ngx_http_handler来真正地处理一个完整的HTTP请求3.3、keepalive

除了http1.0不带content-length以及http1.1非chunked不带content-length外,body的长度是可知的客户端的请求头中的connection为close,则表示客户端需要关掉长连接如果为keep-alive,则客户端需要打开长连接如果客户端的请求中没有connection这个头,那么根据协议,如果是http1.0,则默认为close,如果是http1.1,则默认为keep-alive如果服务端最后决定keepalive打开,响应头中会包含connection:keep-alive,否则就是connection:closekeepalive开启的好处:客户端一次访问需要多次访问同一个server时,会减少大量time-wait的数量3.4、pipe

pipeline流水线作业,是keepalive的一种升华与keepalive相同也是基于长连接利用一个连接做多次请求与keepalive的区别keepalive:第二个请求必须等到第一个请求的响应接受完全后才能发起pipeline:nginx对pipeline中的多个请求处理不是并行的,依然一个请求一个请求的处理,只是在处理第一个请求的时候,客户端就可以发起第二个请求实现原理:nginx读取数据时,会将读取的数据放到一个buffer里,处理完前一个请求后,如果发现buffer里还有数据,就会认为是下一个请求的开始,然后处理下一个请求,否则设置keepalive3.5、lingering_close

延迟关闭,当nginx关闭连接时,先关闭tcp的写,等待一段时间再关闭连接的读保持更好的客户端兼容性。需要消耗更多的额外资源(比如连接会被一直占用)

四、nginx的配置系统

由一个主配置文件和其他一些辅助配置文件构成这些文件都是纯文本文件全部位于nginx安装目录的conf目录下只有主配置文件nginx.conf是在任何情况下都会被使用nginx.conf中,若干配置项由配置指令和指令参数两个部分构成4.1、指令

配置指令是一个字符串可以用单引号或者双引号括起来,也可以不如果配置指令包含空格,一定要引起来。4.2、指令参数

指令参数使用一个或多个空格或者TAB字符与指令隔开指令参数有一个或多个TOKEN串组成,TOKEN串之间由空格或者TAB键分隔简单配置项:error_page 500 502 503 504 /50x.html;复杂配置项:location / { root /home/jizhao/nginx-book/build/html; index index.html index.htm;}

4.3、指令上下文

nginx.conf中的配置信息根据逻辑上的意义,进行分类,分成了多个作用域(配置指令上下文)不同的作用域含有一个或者多个配置项nginx支持的几个指令上下文

五、nginx的模块化体系结构

nginx的内部结构是由核心部分和一系列的功能模块所组成好处:使每个模块的功能相对简单,便于开发,同时便于对系统进行功能扩展5.1、模块概述

将各功能模块组织成一个链,有请求到达时,请求依次经过这条链上的部分或者全部模块,进行处理。有两个模块比较特殊,他们居于nginx core和各功能模块的中间。这两个模块就是http模块和mail模块。http模块和mail模块在nginx core之上实现了另外一层抽象,处理与HTTP协议和email相关协议(SMTP/POP3/IMAP)有关的事件,并且确保这些事件能被以正确的顺序调用其他的一些功能模块5.2、模块的分类

5.3、请求的处理流程

初始化HTTP Request(读取来自客户端的数据,生成HTTP Request对象,该对象含有该请求所有的信息)处理请求头处理请求体如果有的话,调用与此请求(URL或者Location)关联的handler依次调用各phase handler进行处理通常情况下,一个phase handler对这个request进行处理,并产生一些输出。通常phase handler是与定义在配置文件中的某个location相关联的一个phase handler通常执行以下几项任务:获取location配置产生适当的响应发送response header发送response body

原文选自:https://baijiahao.baidu.com/s?id=1634584381830399570&wfr=spider&for=pc

2019BAT等互联网大厂岗位推荐集锦:https://github.com/0voice/enterprise_job_recommend

如果觉得还不错的话,可以后台私信我,获取更多学习教程。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表