网站首页 > 技术教程 正文
一、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
如果觉得还不错的话,可以后台私信我,获取更多学习教程。
猜你喜欢
- 2024-10-13 nginx做限流设置(nginx 限流10000每秒)
- 2024-10-13 Centos7 Redis 安装(centos安装redis6)
- 2024-10-13 蓝易云 - 什么是HTTP500内部服务器错误,要如何修复?
- 2024-09-28 thinkphp5出现500错误怎么办(thinkphp页面错误)
- 2024-09-28 QPS提升60%,阿里巴巴轻量级开源 Web 服务器Tengine负载均衡算法
- 2024-09-28 2020年面试复盘大全500道:Redis+ZK+Nginx+数据库+分布式+微服务
- 2024-09-28 网页出现500错误是什么问题(网页500报错)
- 2024-09-28 Nginx限流配置详解(nginx 限流10000每秒)
- 2024-09-28 nginx 500 502 504 区别(nginx502和504)
你 发表评论:
欢迎- 最近发表
-
- Win10 TH2正式版官方ESD映像转换ISO镜像方法详解
- 使用iso镜像升级到Windows 10的步骤
- macOS Ventura 13.2 (22D49) Boot ISO 原版可引导镜像
- 安利一个用ISO镜像文件制作引导U盘的的小工具RUFUS
- CentOS 7使用ISO镜像配置本地yum源
- 用于x86平台的安卓9.0 ISO镜像发布下载:通吃I/A/N、完全免费
- AlmaLinux 9.6发布:升级工具、初步支持IBM Power虚拟化技术
- Rufus写入工具简洁介绍与教程(写入模式)
- 新硬件也能安装使用了,Edge版Linux Mint 21.3镜像发布
- 开源工程师:Ubuntu应该抛弃32位ISO镜像
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)