E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
nginx源码分析
Nginx源码分析
-master和worker进程间的通信
转载申明:本文可以任意转载,但需注明原文地址,谢谢!前面单独分析了master进程和worker的工作情况,本文就大概看一下master进程和worker进程之间是如何使用channel来完成通信的。这部分实现的源码主要分布于src/os/unix/channel.h和channel.c两个文件中。实现极其简单,没有什么复杂的逻辑。下面,我绘制了一个简单的master进程和worker进程间的关系
Marcky
·
2020-07-09 11:10
Nginx源码分析
nginx源码分析
(3)——进程模型
原本计划这一篇的内容是配置文件的解析,不过为了连贯性,还是继续nginx初始化的过程。nginx的进程模型与大多数http服务器采用的模型是一样的,都是Master-Worker模型。Master进程负责处理外部信号,同时管理所有的Worker进程。而Worker进程就是用来处理连接的建立、请求和响应,大部分的事件处理都是在worker进程中。1.基本的数据结构1.ngx_process_t进程数
chosen0ne
·
2020-07-04 13:52
Nginx
Web
Server
源码之路
nginx源码分析
(一)-基础数据结构ngx_str_t
近来想拜读一下优秀的开源代码设计,之前也阅读过qt以及opencv的源码,不过学习nginx源码的目的是想试着用设计模式以及C++的思想来封装一次nginx的源码,但是第一步还得好好熟悉一下nginx,大师们都说过,最好的办法就是看源码,万能的开源。ngx_str_t定义ngx_str_t是nginx中定义的类似于字符串的结构,其中包含了字符串的长度(不包含终止字符'\0')以及字符串的首地址,数
我只是一个单纯的2
·
2020-07-02 11:56
nginx源码分析
configure脚本详解
一、前言在分析源码时,经常可以看到类似#if(NGX_PCRE)....#endif这样的代码段,这样的设计可以在不改动源码的情况下,通过简单的定义宏的方式来实现功能的打开与关闭,但是在nginx/src目录下始终没有找到宏NGX_PCRE对应的#define语句。在之前介绍event模块的时候,讲到init_cycle函数中对cycle进行了初始化,其中很重要一步操作就是讲包含所有module信
幽雨雨幽
·
2020-07-01 16:22
Nginx
Nginx源码分析
- 主流程篇 - 平滑重启和信号控制(10)
目录平滑重启信号处理平滑重启上一篇文章我们分析了Nginx的启动流程。其中ngx_add_inherited_sockets主要用于继承Socket文件句柄。Nginx有平滑重启的功能,通过平滑重启,可以让用户无感知并且不中断。#平滑重启sudokill-HUP`cat/usr/local/nginx-1.4.7/nginx.pid`Nginx支持热切换,为了保证切换之后的套接字不丢失,就需要Ng
阿里十年老码农zhuli
·
2020-06-23 18:39
Nginx源码阅读
nginx源码分析
-缓冲区
基本介绍完整的有注释的代码放在githubnginx的缓冲区结构,贯穿了整个nginx。缓冲区ngx_buf_t是处理大数据块的关键结构可用于内存数据和磁盘数据Nginx缓冲区,主要用来存储非常大块内存(内存池的pool->chain结构)数据结构定义这里需要注意的是:缓冲区主要用来存储非常大的内存块,在内存池的pool->chain结构上;既可处理内存数据,也可以处理磁盘数据;标志位采用了位域的
besmallw
·
2020-04-12 10:28
nginx源码分析
-内存池
介绍(MemoryPool)是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。(转自百度百科)完整的有注释的代码放在我的github基本概念内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分
besmallw
·
2020-03-15 11:01
系统重启后nginx reload不生效原因分析
一,Nginxreload过程分析:经过查看官网文档及结合
Nginx源码分析
,大致得出reload过程进行了如下操作。1,检查配置是否正确相当于nginx-t
三杯水Plus
·
2020-02-26 02:03
nginx源码分析
-多进程socket的处理
这篇文章主要分析的是linux及windows的socket处理,如何避免惊群及进程间负载均衡的探讨,这里的惊群主要是指多进程对于新建的连接如何避免同时争用accept现象的处理。进程的创建linux进程创建的方式主要通过fork来创建出子进程//src/os/unix/ngx_process.cngx_pid_tngx_spawn_process(ngx_cycle_t*cycle,ngx_sp
tickbh
·
2019-12-21 03:47
史上最全106道Java高频面试合集,九大专题,命中率高达95%
小编整理出Java程序员必备的核心技能,同时也是面试时面试官必问的知识点,篇章也是包括了很多知识点,其中包括了有分布式架构、高可用扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,
Nginx
Java_老男孩
·
2019-12-04 17:42
Java
面试
程序员
nginx源码分析
线程池详解
nginx源码分析
线程池详解一、前言nginx是采用多进程模型,master和worker之间主要通过pipe管道的方式进行通信,多进程的优势就在于各个进程互不影响。
·
2019-09-22 21:13
Nginx源码分析
之--auto/sources脚本
微信公众号:郑尔多斯关注可了解更多的Nginx知识。任何问题或建议,请公众号留言;关注公众号,有趣有内涵的文章第一时间送达!回顾上一篇文章我们详细的讲解了auto/init文件,该文件主要是初始化一些文件目录,便于后面的编译过程。configure执行auto/init之后就会执行auto/sources文件,所以本文分析一下auto/sources文件,这个文件虽然内容很多,但是结构非常简单,全
郑尔多斯
·
2019-07-12 10:02
nginx源码分析
Nginx
源码
Nginx源码分析
:master/worker工作流程概述
nginx源码分析
nginx-1.11.1参考书籍《深入理解nginx模块开发与架构解析》Nginx的master与worker工作模式在生成环境中的Nginx启动模式基本都是以master/worker
小屋子大侠
·
2019-04-10 12:19
服务端
Nginx
源码
【
Nginx源码分析
】Nginx中http2浅析
运营研发张仕华本文通过一个小例子串一遍nginx处理http2的流程。主要涉及到http2的协议以及nginx的处理流程。http2简介http2比较http1.1主要有如下五个方面的不同:二进制协议http1.1请求行和请求头部都是纯文本编码,即可以直接按ascii字符解释,而http2是有自己的编码格式。并且nginx中http2必须建立在ssl协议之上。头部压缩举个例子,HTTP1.1传一个
LNMPR源码研究
·
2018-12-11 00:00
nginx
【
Nginx源码分析
】Nginx的编译
周生政nginx构建使用shell语言生成makefile,以及ngx_auto_config.h,ngx_auto_headers.h,ngx_modules.c。其中ngx_auto_config.h为各种常量定义,ngx_auto_headers.h为头文件,ngx_modules.c为nginx模块。makefile用来组织编译流程。configure主流程auto/options根据co
LNMPR源码研究
·
2018-11-19 00:00
nginx
【
Nginx源码分析
】Nginx的内存管理
施洪宝一.概述应用程序的内存可以简单分为堆内存,栈内存。对于栈内存而言,在函数编译时,编译器会插入移动栈当前指针位置的代码,实现栈空间的自管理。而对于堆内存,通常需要程序员进行管理。我们通常说的内存管理亦是只堆空间内存管理。对于内存,我们的使用可以简化为3步,申请内存、使用内存、释放内存。申请内存,使用内存通常需要程序员显示操作,释放内存却并不一定需要程序员显示操作,目前很多的高级语言提供了垃圾回
LNMPR源码研究
·
2018-11-14 00:00
nginx
【
Nginx源码分析
】Nginx中的锁与原子操作
李乐问题引入多线程或者多进程程序访问同一个变量时,需要加锁才能实现变量的互斥访问,否则结果可能是无法预期的,即存在并发问题。解决并发问题通常有两种方案:1)加锁:访问变量之前加锁,只有加锁成功才能访问变量,访问变量之后需要释放锁;这种通常称为悲观锁,即认为每次变量访问都会导致并发问题,因此每次访问变量之前都加锁。2)原子操作:只要访问变量的操作是原子的,就不会导致并发问题。那表达式么i++是不是原
LNMPR源码研究
·
2018-11-14 00:00
nginx
【
Nginx源码分析
】Nginx的listen处理流程分析
施洪宝一.基础nginx源码采用1.15.5后续部分仅讨论http中的listen配置解析以及优化流程1.1概述假设nginxhttp模块的配置如下http{server{listen127.0.0.1:8000;server_namewww.baidu.com;roothtml;location/{indexindex.html;}}server{listen10.0.1.1:8000;serv
LNMPR源码研究
·
2018-11-13 00:00
nginx
【
Nginx源码分析
】Nginx配置文件解析(二)
运营研发团队李乐本文作为nginx配置文件解析的第二篇,开始讲解nginx配置文件解析的源码,在阅读本文之前,希望你已经阅读过第一篇。《nginx配置文件解析(一)》1.1配置解析流程解析配置的入口函数是ngx_conf_parse(ngx_conf_tcf,ngx_str_tfilename),其输入参数filename表示配置文件路径,如果为NULL表明此时解析的是指令块。那么cf是什么呢?先
LNMPR源码研究
·
2018-11-06 00:00
nginx
Nginx源码分析
3:模块初始化
直接跟代码:main->ngx_preinit_modules(对模块名进行复制)->ngx_init_cycle(讲模块对象复制到cycle里面)->ngx_cycle_modulesngx_master_process_cycle->ngx_start_worker_processes->ngx_worker_process_cycle->ngx_worker_process_init->cy
dengshengli123
·
2018-06-12 20:02
nginx
Nginx源码分析
:epoll
epoll简介:用于支持高并发的事件机制优点:1、支持打开一个很大个数的socket连接数(linuxsocket连接默认是2048),最大可以达到最大文件数目(cat/proc/sys/fs/file-max,大小和系统内存相关)ps:apache使用的就是多进程方式(一个进程最大支持2048socket连接,通过增多进程来实现)2、IO效率不随FD的增多而降低select/poll会随着soc
dengshengli123
·
2018-06-12 20:23
nginx
Nginx源码分析
:nginx安装与配置
在线安装:os:ubuntu16.04apt-getinstallnginx源码安装:源码下载地址:http://nginx.org/download/安装依赖库:(可以源码安装,这里直接使用的在线安装)apt-getinstallopenssllibssl-devapt-getinstalllibpcre3libpcre3-devapt-getinstallzlib1g-dev安装:tarzvf
dengshengli123
·
2018-06-12 15:54
nginx
nginx处理post请求(负载均衡启动)
对于
nginx源码分析
系列的文章,到目前为止,已经接近尾声了。剩余反向代理模块,负载均衡模块还没分析完。
ApeLife
·
2017-08-05 06:20
nginx源码分析
nginx源码分析
nginx源码分析
configure脚本详解
nginx源码分析
――configure脚本一、前言在分析源码时,经常可以看到类似#if(NGX_PCRE)....
sxhlinux
·
2017-05-26 09:41
Nginx源码分析
:3张图看懂启动及进程工作原理
本文系转载》》》》》》》》》》》》》》》》编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由陈科在高可用架构群分享。转载请注明来自高可用架构公众号「ArchNotes」。导读:很多工程师及架构师都希望了解及掌握高性能服务器开发,阅读优秀源代码是一种有效的方式,nginx是业界知名的高性能Web服务器实现,如何有效的阅读及理解nginx?本文用图解的方式帮助大家来更好的阅读及理解ngi
demop
·
2017-05-11 20:14
Nginx源码分析
- Nginx启动以及IOCP模型
Nginx源码分析
-Nginx启动以及IOCP模型版本及平台信息本文档针对Nginx1.11.7版本,分析Windows下的相关代码,虽然服务器可能用linux更多,但是windows平台下的代码也基本相似
InsZVA
·
2016-12-27 21:23
后端
Nginx源码分析
- Event事件篇 - epoll事件模块
这一篇主要讲解一下epoll事件模块。Nginx支持多种事件模块:epoll/pool/select/kqueue等。epoll比较常用,我们也比较熟悉。Nginx的epoll事件模块在/event/module/ngx_epoll_module.cEpoll模块的数据结构1.epoll模块命令集ngx_epoll_commands/** *epoll模块命令集 *epoll_events:这个配
initphp
·
2016-11-03 19:00
10.
nginx源码分析
之数据结构:ngx__rbtree_t
nginx源码分析
之数据结构:ngx__rbtree_t除了之前介绍的list、array、queue等线性数据结构之外,nginx还提供了查询效率较高的红黑树结构,这种二叉平衡查找树的使用极大提高了查找效率
linux_player_c
·
2016-10-31 20:00
数据结构
nginx
5.
nginx源码分析
之数据结构:ngx_string
ngx_stringnginx的数据结构设计的非常精巧,高效,学习nginx的数据结构设计可以加深我们对于其后续代码的阅读深度。nginx的数据结构在源码包的src/core目录中,nginx对应的文件是ngx_string.c和ngx_string.h文件:[root@rsynccore]#llngx_string.*-rw-r--r--11001100143851Oct1111:03ngx_s
linux_player_c
·
2016-10-27 10:57
nginx
nginx
数据结构
Nginx源码分析
- Event事件篇 - Event模块的进程初始化ngx_event_process_init
前面一篇我们讲解了《
Nginx源码分析
-Event事件篇-Event模块和配置的初始化》 ,了解了整个Event模块分为:ngx_events_module事件模块、ngx_event_core_module
initphp
·
2016-09-15 17:00
Nginx源码分析
- Event事件篇 - Event模块和配置的初始化
Event的模块和配置的初始化,必须得结合我们讲过的两篇文章:《
Nginx源码分析
-主流程篇-模块的初始化》 和 《
Nginx源码分析
-主流程篇-解析配置文件》 前面我们讲解了模块的初始化以及核心模块的配置文件的解析
initphp
·
2016-09-04 20:00
Nginx源码分析
—HTTP框架执行流程
Nginx源码分析
—HTTP框架执行流程HTTP框架动态执行中的大概流程:先与客户端建立TCP连接,接收HTTP请求行、头部并解析出他们的意义,再根据nginx.conf配置文件找到一些HTTP模块,使其一次合作者处理这个请求
xyajia
·
2016-08-30 16:00
Nginx源码分析
- Event事件篇 - Nginx的Event事件模块概览
前一章,我们讲解了《
Nginx源码分析
-主流程篇-多进程的惊群和进程负载均衡处理》 中实际上已经涉及到了一部分事件模块的概念。
initphp
·
2016-08-22 19:00
Nginx源码分析
- 主流程篇 - 多进程的惊群和进程负载均衡处理
Linux2.6版本之前还存在对于socket的accept的惊群现象。之后的版本已经解决掉了这个问题。惊群是指多个进程/线程在等待同一资源时,每当资源可用,所有的进程/线程都来竞争资源的现象。Nginx采用的是多进程的模式。假设Linux系统是2.6版本以前,当有一个客户端要连到Nginx服务器上,Nginx的N个进程都会去监听socket的accept的,如果全部的N个进程都对这个客户端的so
initphp
·
2016-08-21 14:00
Nginx源码分析
- 主流程篇 - 多进程实现
默认情况下,Nginx都是多进程的运行模式。Nginx和Memcached不一样,是多进程的模式。采用多进程模式最大的好处:1.每个进程的资源独立2.不需要添加各种繁琐的锁了Nginx多进程实现的流程图Nginx多进程具体实现1.ngx_master_process_cycle进入多进程模式ngx_master_process_cycle方法主要做了两个工作:1.主进程进行信号的监听和处理2.开启
initphp
·
2016-08-21 09:00
Nginx源码分析
- 主流程篇 - 解析配置文件
Nginx源码中比较重要的一块就是配置文件的解析。一般是解析/usr/local/nginx/conf/nginx.conf文件中的配置信息。前一篇文章,我们介绍了Nginx的模块化。Nginx的功能模块都是通过cycle->modules模块进行管理的。而每个模块都会有自己的配置文件。Nginx的配置文件nginx.conf1.Nginx的配置文件每一行就是一条命令。2.最外层的为核心模块的配置
initphp
·
2016-07-14 18:00
Nginx源码分析
- 主流程篇 - 模块的初始化
Nginx是高度模块化的,各个功能都会封装在模块中。例如core模块、HTTP模块等。也可以自定义模块。这一篇文章主要讲解模块的初始化。后续会有一篇文章教你如何编写Nginx的模块。Nginx实现模块管理的代码主要在:/src/core/ngx_module.c文件中。模块的数据结构ngx_module_s模块结构结构体ngx_module_s主要用于管理每一个模块的详细信息。Nginx的所有模块
initphp
·
2016-07-13 17:00
Nginx源码分析
- 主流程篇 - 全局变量cycle初始化
Nginx的大部分初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)展开。本文主要讲解cycle的数据结构以及初始化过程中干了什么事情。cycle的初始化过程在/src/core/cycle.c文件中。数据结构ngx_cycle_t的数据结构cycle是Nginx贯穿全局的一个全局变量。阅读Nginx的源码必须得先搞清楚cycle全局变量的初始化过程。/** *Ngin
initphp
·
2016-07-11 17:00
Nginx源码分析
- 主流程篇 - 平滑重启和信号控制
平滑重启上一篇文章我们分析了Nginx的启动流程。其中ngx_add_inherited_sockets主要用于继承Socket文件句柄。Nginx有平滑重启的功能,通过平滑重启,可以让用户无感知并且不中断。#平滑重启 sudokill-HUP`cat/usr/local/nginx-1.4.7/nginx.pid`Nginx支持热切换,为了保证切换之后的套接字不丢失,就需要Nginx继承原先的s
initphp
·
2016-07-06 18:00
Nginx源码分析
- 主流程篇 - Nginx的启动流程
前几篇主要介绍了Nginx比较常用的一些基础数据结构,例如pool,buf,array,list等。通过对Nginx基础数据结构的理解,能更好的帮助我们读懂整个Nginx的源代码。这一章节开始主要分析Nginx的主流程。Nginx的主流程的实现函数在./src/core/nginx.c文件中。通过main()函数,我们可以窥探整个Nginx启动的流程。Nginx的启动过程main()函数的启动过程
initphp
·
2016-07-05 15:00
nginx源码分析
—全局变量ngx_cycle的初始化
Content0.序1.ngx_cycle_t结构2.ngx_init_cycle()分析3.注意问题3.1如何调用CORE模块的callback函数?3.2open_files链表中的文件名何时初始化?4.小结 0.序 Nginx的大部分初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)展开。本文重点介绍全局变量ngx_cycle的初始化。实现文件:./src/cor
a809146548
·
2016-05-05 17:00
C++
nginx
C++11
Nginx源码分析
-核心模块剖析及常见问题
Nginx在解析完请求行和请求头之后,一共定义了十一个阶段,分别介绍如下HTTP模块工作原理HTTP处理的十一个阶段定义typedefenum{ NGX_HTTP_POST_READ_PHASE=0,//读取请求内容阶段 NGX_HTTP_SERVER_REWRITE_PHASE,//Server请求地址重写阶段 NGX_HTTP_FIND_CONFIG_PHASE,//配置查找阶段 NG
hanzheng260561728
·
2016-05-01 14:00
Nginx源码分析
:核心模块剖析及常见问题
Nginx在解析完请求行和请求头之后,一共定义了十一个阶段,分别介绍如下HTTP模块工作原理HTTP处理的十一个阶段定义typedefenum{ NGX_HTTP_POST_READ_PHASE=0,//读取请求内容阶段 NGX_HTTP_SERVER_REWRITE_PHASE,//Server请求地址重写阶段 NGX_HTTP_FIND_CONFIG_PHASE,/
wuli2496
·
2016-02-23 10:00
Nginx源码分析
:3张图看懂启动及进程工作原理
图一:nginx启动及内存申请过程分析任何程序都离不开启动和配置解析。ngx的代码离不开ngx_cycle_s和ngx_pool_s这两个核心数据结构,所以我们在启动之前先来分析下。内存申请过程分为3步假如申请的内存小于当前块剩余的空间,则直接在当前块中分配。假如当前块空间不足,则调用ngx_palloc_block分配一个新块然后把新块链接到d.next中,然后分配数据。假如申请的大小大于当前块
wuli2496
·
2016-02-23 10:00
Nginx源码分析
- 基础数据结构篇 - 字符串结构 ngx_string.c
Nginx的ngx_str_t字符串结构非常简单和好用。nxg_string.c文件中包含了很多常用的字符串操作方法,具体我们就不讲解了,主要简单来看下Nginx的字符串数据结构数据结构定义ngx_str_t字符串结构/** *字符串结构 */ typedefstruct{ size_tlen;//字符串长度 u_char*data;//具体的指针地址 }ngx_str_t;ngx_keyval_
initphp
·
2016-02-17 18:00
系统重启后ngix reload不生效原因分析
一,Nginxreload过程分析:经过查看官网文档及结合
Nginx源码分析
,大致得出reload过程进行了如下操作。1,检查配置是否正确相当于nginx-t2
minminmsn
·
2016-02-17 17:32
nginx
reload
strac
系统重启后ngix reload不生效原因分析
一,Nginxreload过程分析:经过查看官网文档及结合
Nginx源码分析
,大致得出reload过程进行了如下操作。1,检查配置是否正确相当于nginx-t2
三杯水
·
2016-02-17 17:32
nginx
reload
strac
负载均衡
Nginx源码分析
- 基础数据结构篇 - hash表结构 ngx_hash.c
Nginx的hash表结构和我们之前阅读memcached的时候看到的会有很大的差别。笔者在阅读Nginx的hash模块的时候,阅读了好几天,比较不容易理解,但是Nginx的hash模块包含了对内存利用最大化、CPU利用最大化的很多设计细节,非常值得推荐和学习。Nginx的hash表结构主要几个特点:1.静态只读。当初始化生成hash表结构后,是不能动态修改这个hash表结构的内容。2.将内存利用
initphp
·
2016-02-16 16:00
Nginx源码分析
- 基础数据结构篇 - 单向链表结构 ngx_list.c
Nginx的list单向链表的结构和Nginx的数组结构Array有点类似,总体来说,数据结构也是非常简单清晰的。Nginx的单向链表也是固定了每个元素的大小,并且用单向链表的方式连接。数据结构定义ngx_list_part_t链表节点定义typedefstructngx_list_part_sngx_list_part_t; /** *链表节点每个节点大小=size*nelts *节点元素用完
initphp
·
2016-02-05 10:00
Nginx源码分析
- 基础数据结构篇 - 双向链表结构 ngx_queue.c
Nginx的链表结构非常小巧和简单。设计的非常精巧。通过链表的简单和精巧的设计,让Nginx的链表的数据结构和具体业务依赖进行了解耦。一般我们在设计c语言程序的时候,完全可以学习Nginx的这种数据结构的设计方式。数据结构定义链表数据结构ngx_queue_ttypedefstructngx_queue_sngx_queue_t; /** *链表的数据结构非常简单,ngx_queue_s会挂载到
initphp
·
2016-01-31 17:00
上一页
1
2
3
4
5
6
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他