nginx
文章平均质量分 74
Nginx ("engine x") 是一个开源的,支持高性能、高并发的 Web 服务和代理服务软件。它是由俄罗斯人 Igor Sysoev 开发的,最初被应用在俄罗斯的大型网站 www.rambler.ru 上。后来作者将源代码以类 BSD 许可的形式开源出来供全球使用。
ghostwritten
关注领域:go python k8s docker 数据库 运维
打造一个专属个人更精准的问题解决搜索引擎。
展开
-
nginx【30】listen指令的用法
一个请求进入Nginx开始处理之前尼?我们首先要增添端口,以使得Nginx可以和客户端建立起一个TCP连接,那么监听端口的这个指令尼,叫listen;它是放在我们的server配置块下的;通过监听的端口或者地址;我们其实已经可以决定有哪些匹配上我们TCP四元簇的地址连接对应的server块的相关指令去处理相应的请求;下面我们来简单看下listen指令提供的简单功能;我们可以看到listen指令它的语法主要有三类:(1):监听一个地址加上相应的端口:listen address[:port]因为我原创 2022-03-02 14:14:14 · 5097 阅读 · 0 评论 -
nginx【29】冲突的配置指令以谁为准?
通过实例向大家演示HTTP模块,并结合以前讲解的知识;nginx的模块非常多,包括官方模块和第三方模块;每一个模块又都有自己独特的指令;这些繁琐的指令是非常难以记忆的;接下来带领大家以请求处理流程的方式进行把所有的常用的HTTP模块的指令梳理在一起;把HTTP模块已在Nginx设计架构中定义的11个阶段的方式依次的去讲解每一个模块的使用方法;那么在nginx的11个阶段讲解完以后尼,我们还会讲到nginx的HTTP过滤模块;它会通过加工我们向客户端返回的响应来向客户端返回不一样的内容;最后我们还需要原创 2022-03-02 14:07:16 · 2047 阅读 · 0 评论 -
nginx【28】使用动态模块来提升运营效率
接下来,我们来查看Nginx的动态模块,动态模块可以帮助我们在使用Nginx的时候,在升级Nginx的时候帮助我们减少编译环节;下面我们来看下动态模块在编译及使用的流程;我们再用一个例子,给大家演示下;们在使用动态模块之前,先来看下在不适用动态模块的方法里,我们是怎么样使用Nginx;首先我们在下载完nginx的源代码,提供了一个叫config的脚本,以及在源代码中介绍的auto目录;这里都在帮助nginx在建立编译系统;那么nginx源代码中提供了很多官方模块,但我们也可能添加许多的第三方模块,不原创 2022-03-02 10:42:11 · 2820 阅读 · 0 评论 -
nginx【27】Nginx中最常用的容器:红黑树
之前我们提到nginx的多个worker进程之间,做进程间通讯的时候,经常在共享内存上使用红黑树来管理许多对象,那么实际上在Nginx的内存上也会大量使用红黑树,现在我们来看看nginx中第二个非常常用的数据容器,红黑树首先是个二叉树,比如每一个节点:比如下图11有两个子节点,左子节点是6,右子节点是15;那么红黑树的第二个特点尼它是一个查找二叉树,就是有顺序的,也就是我们左边的节点要比右边的节点要小,比如11的左子节点6,右子节点15,所有的节点都满足这一个特性;那么这样的一个二叉查找数,它有可能退化原创 2022-02-22 22:11:42 · 1329 阅读 · 0 评论 -
nginx【26】哈希表的max_size与bucket_size如何配置
Nginx容器是许多nginx高级功能的实现基础,即使我们不需要编辑第三方模块或者查看nginx的源代码;但我们需要变更我们的nginx配置文件,以达到最大化的性能;我们也需要了解Nginx容器是怎么样使用的;下面我们来看下nginx最主要的内部容器;(1):首先就是数组,也就是ngx_array_t;这里的数组和我们平常所理解的数组还是有所不同的;它是多块连续内存,其中每一块连续内存中可以存放很多元素;(2):而链表就是ngx_list_t;(3):对列是ngx_queue_t;原创 2022-02-22 22:07:37 · 937 阅读 · 0 评论 -
nginx【25】用好共享内存的工具 Slab管理器
刚刚我们谈到nginx不同的worker进程间需要共享信息的时候,需要通过共享内存;我们也谈到了共享内存上可以使用链表或者红黑树这样的数据结构;但是每一个红黑树上有许多节点;每一个节点你都需要分配内存去存放;那么怎么样把一整块共享内存切割成一小块给红黑树上的每一个节点使用尼?下面我们来看下Slab内存分配管理是怎么样应用于共享内存上的;首先我们来看下Slab内存管理是怎么样的一种形式;它首先会把整块的共享内存分为很多页面;那么每个页面例如4k;会切分为很多slot;比如32字节是一种slot;64字节原创 2022-02-22 21:58:46 · 823 阅读 · 0 评论 -
nginx【24】所有worker进程协同工作的关键:共享内存
Nginx是一个多进程程序,不同的worker进程之间,如果想要共享数据,那么只能通过共享内存;下面我们来看一看Nginx的共享内存是怎么使用的?nginx的进程间的通讯方式主要有两种(1):第一种是信号,之前我们在说如何管理nginx的过程中已经比较详细的介绍过了;(2):共享内存:如果需要做数据的同步 只能通过共享内存;所谓共享内存,也就是我们打开了一块内存,比如说10M,一整块0到10M之间,多个worker进程之间可以同时的访问它;包括读取和写入,那么为了使用好这样一个共享内存就会引入另外两原创 2022-02-22 20:34:40 · 1427 阅读 · 0 评论 -
nginx【23】内存池对性能的影响
如果你开发过nginx的第三方模块,虽然我们在写C语言代码,但是不需要关心内存的释放,如果你现在在配置一些罕见场景的nginx的时候,你可能会需要去修改nginx在请求和连接上初始分配的内存池大小,但是nginx官方上推荐通常不需要修改这样的配置,那么我们究竟要不要修改这些内存池的大小尼?下面我们来看下 内存池 究竟是怎么运转的?在上讲中我们看到一个结构体ngx_connection_s也就是每一个连接需要这么一个结构体;而这个结构体中,有一个成员变量pool;它对应着这个连接所使用的内存池这个内原创 2022-02-22 20:09:11 · 839 阅读 · 0 评论 -
nginx【22】Nginx如何通过连接池处理网络请求
之前我们谈到了nginx的读写事件,这些网络读写事件究竟是怎么应用到nginx上的尼?还有我们谈到nginx使用了一个连接池来增加它的资源的利用率,下面我们来看下nginx的连接池究竟是怎么来使用的? 我们来看下上图中的右边的图,每一个worker进程里面都有一个独立的ngx_cycle_t这样的一个数据结构;现在不要对它里面的细节来纠结,这里有三个主要的数组需要看一下;其中connections 这就是我们所谓的连接池;它指向的我们这个数组有多大尼?我们可以看下有一个配置项:打开nginx的原创 2022-02-22 19:55:38 · 523 阅读 · 0 评论 -
nginx【21】Nginx的模块
Nginx之所以能有如此多的特性,是因为有大量的第三方开发者,在为它开发模块,Nginx之所以有这么丰富的生态圈,则是因为它的模块设计非常的优良,就比如TCP协议,它从上个世纪70年代设计至今,没有做过大的变动,接下来我们来看下nginx的模块设计究竟有什么高明之处?理解Nginx模块,(1):首先我们要保证它是编译到我们nginx的binary的二进制文件的;(2):其次我们要了解,这个nginx模块究竟提供了哪些配置项?(3):还要了解模块何时被使用?因为有的模块只要编译进ngin原创 2022-02-22 13:34:22 · 1410 阅读 · 0 评论 -
nginx【20】同步&异步 阻塞&非阻塞之间的区别
很多同学对:同步&异步 阻塞&非阻塞这样的两个概念不是很清楚;在我看来,阻塞和非阻塞主要是指操作系统和底层的C库提供的方法或者一个系统调用,也就是说我们在调用这个方法的时候,这个方法可能会导致我的进程进入sleep状态,为什么会进入sleep状态尼?就是当前的状态不满足的情况下,操作系统主动的把我的进程切换到另外一个进程来使用当前的CPU了,那么这样就是一个阻塞方法,而非阻塞尼就是我们调用该方法永远不会因为当我们时间片未用完时把我们的进程主动切换掉;而同步和异步尼则是指我们的调用的方式而原创 2022-02-22 10:58:02 · 1062 阅读 · 0 评论 -
Nginx【19】Nginx的请求切换
前面我们谈到了nginx怎么使用epoll运行自己的事件驱动框架的,那么这样的一个事件驱动框架到底会给我们带来怎样的一个好处?我们来看下在请求切换的这样一个场景中,这种事件驱动框架给我们带来的争议; 在下面的这张图中,实际上有三个请求,蓝色的,绿色的还有橘黄色的;每一个请求如果是一个HTTP请求的话,我们把它简化为三部分,比如说第一部分我们收到HTTP请求的header 那么收完header以后,我大致就知道我该交给上游的哪一台服务器去处理,应用一些负载均衡算法,那么接下来我可能会向上游服务器建立原创 2022-02-18 11:09:09 · 2155 阅读 · 0 评论 -
Nginx【18】epoll的优劣和原理
上一节我们谈论到了Nginx的事件分发机制,在这个循环流程中,Nginx怎样能够快速的从操作系统的KERNEL中获取到等待处理的事件;这么一个简单的步骤,其实经历了很长时间才得以想出办法解决;比如,到现在Nginx主要在使用epool这样一个网络事件收集器的模型:现在我们简单来回顾下epool主要有些什么样的特点?常见时间模型的性能如下:随着横轴并发连接数的增加,纵轴消耗时间的展示;epool的消耗时间与并发连接基本上是无关的,所以它非常适合使用大并发连接的处理;为什么会这样?我们来看它的场景原创 2022-02-16 15:54:44 · 1658 阅读 · 0 评论 -
Nginx【17】事件驱动模型
在我们了解了网络事件以及事件分发收集器以后,我们再来看nginx是怎样来处理事件的?当我们nginx刚刚启动的时候,实际上,在第一步wait for events on connections,也就是说我们打开了80或443端口;这个时候我们在等待新的事件进来,什么样的事件?比如新的客户端连上了我们的nginx,它向我们发起了连接;我们在等这样的事件,这样一步,往往对应着我们epool中的 epoolwait这么一个方法;这个时候我们的nginx其实是处于sleep这样的一个状态;而当操作系统收到了一个原创 2022-02-16 15:12:37 · 847 阅读 · 0 评论 -
nginx【16】网络事件实例演示
之前我们谈到了网络报文的发送,以及这些报文对应了Nginx中的网络事件,比如像accept建立一条新连接,其实是收到了一条读事件,这么说大家可能觉得比较抽象,接下来我们通过抓包来分析建立三次握手时是怎么样让 Nginx 收到读事件,使用的抓包工具是 Wireshark这里我们访问我们之前搭建的一个静态资源Web服务器;我们可以访问它,这个IP对应着我们的Nginx服务器;我们访问这个服务器的时候对它抓包 首先,我们下载安装Wireshark这么一个网络分析器;然后对Nginx这个所在的ip和对应的原创 2022-02-16 15:06:53 · 991 阅读 · 0 评论 -
nginx【15】网络收发与Nginx事件间的对应关系
Nginx是一个事件驱动的框架,所谓事件主要是指网络事件,那么Nginx每个连接会自然对应两个事件,一个读事件,一个写事件,所以我们在深入了解Nginx的各种原理,以及它在极端场景下的错误场景的处理时,我们必须首先理解什么是网络事件,下面我们来看如下的图:比如主机A就是我们在家里的一台笔记本电脑,主机B尼就是我们的服务器上面跑的Nginx;从主机A发送一个http的get请求发送到主机B,这样的一个过程中究竟经历了哪些网络事件尼?比如数据流图示:应用层里发送了一个get请求;那么到了传输层尼,它主要原创 2022-02-10 14:40:27 · 1410 阅读 · 0 评论 -
nginx【14】优雅地关闭worker进程
之前我们提到nginx的命令行的时候,nginx的停止有两种方式,-s quit 和-s stop 其中stop表示立即停止nginx,quit表示优雅的关闭nginx;对应的信号也是同样的;还有我们之前提到的 reload 和热部署;我们都使用了优雅的停掉nginx,那么所谓的优雅的停掉nginx到底是怎样的一个过程;所谓优雅的关闭是指对worker进程而言的;因为只有worker进程才会处理请求;如果我们在处理一个连接的时候,不管连接此时对于请求是怎样一个作用,我们直接的去关闭这个连接,会导致用户收原创 2022-02-10 12:41:59 · 1146 阅读 · 0 评论 -
nginx【13】热升级的完整流程
热升级能保证在不停止服务的情况下更换它的binary文件;这个功能非常有用,但在我们执行nginx的binary文件升级过程中,还是可能会遇到很多问题,比如:老的worker进程一直退不掉,新的worker进程出现了问题,我们要考虑使用回滚,或者说我们升级了新的nginx文件以后,会发现很多我们预期的功能或者指向的配置文件出现了错误,下面我们来看下热升级的流程是怎样升级的?第一步:就是把旧的nginx的binary文件替换成新的nginx的binary文件(注意备份旧的nginx配置文件);这里我们只说.原创 2022-02-10 12:20:41 · 1716 阅读 · 0 评论 -
nginx【12】reload流程与优雅停止详解
接下来我们来介绍reload重载配置文件的真相;当我们更改了nginx配置文件的时候,我们都会执行nginx -s reload;那么我们执行这条命令的原因是希望nginx不能停止服务,始终还在处理新的请求的同时,把nginx的配置文件平滑的从旧的nginx.conf更新为新的nginx.conf;这样的一个功能对nginx来说非常的有必要,但是我们往往会发现,在我们执行之后,会发现nginx的worker进程的数量变多了;这是因为老的nginx配置的worker进程它长时间没有退出;当我们使用strea原创 2022-02-09 17:55:41 · 18179 阅读 · 1 评论 -
nginx【11】Nginx的进程结构与管理
接下来我们来看下Nginx的进程结构Nginx其实有两种进程结构,一种是单进程结构,一种是多进程结构;单进程结构,其实不适用于生产环境,只适合我们做开发;因为在生产环境中我们需要保证Nginx足够健壮,以及Nginx可以利用多核的特性;而单进程的Nginx是做不到这一点的;所以默认的配置中都是打开多进程的nginx;我们来看下多进程的Nginx中;它的进程模型是什么样的?会有一个父进程叫master process,它会有许多子进程;子进程会分为两类:一类是cache进程,一类是worker进程;为原创 2022-02-09 15:12:15 · 1738 阅读 · 0 评论 -
nginx【10】Nginx的请求处理流程
Nginx的架构基础为什么要讨论Nginx的架构基础呢?因为Nginx运行在企业内网的最外层,也就是边缘节点,它处理的流量是其他应用服务器处理流量的几倍,我们知道任何一种问题在不同的数量级下解决方案是完全不同的;在Nginx它所处理的应用场景中所有的问题都会被放大,所以我们必须理解为什么Nginx采用master-worker这种架构模型;为什么worker进程的数量要和CPU的核数相匹配;当我们需要在多个worker进程间共享数据的时候;为什么在TLS或者说对一些限流,限速这样的场景,他们的共享方式是原创 2022-02-09 13:53:01 · 1349 阅读 · 0 评论 -
nginx【7】关于SSL 安全协议的理论
从网络原理来看 SSL 安全协议网络安全是当前非常受到关注的一个问题,大部分站点都是通过https来实现站点安全的,那么怎么样才能把自己的http站点变成https站点尼?我们需要了解ssl协议;TLS 协议究竟是怎么保证http的明文消息被加密的呢?我们可以看下TLS的通用模型TLS/SSL发展在OSI七层模型中,应用层是http协议;那么在http协议之下,我们的表示层也就是SSL协议所发挥作用的这一层;它通过握手,交换秘钥,告警,对称加密应用数据等方式使http层没有感知的情况下做到了数据的原创 2022-02-08 18:27:55 · 2975 阅读 · 0 评论 -
nginx【6】用 GoAccess 实现可视化并实时监控 access 日志
文章目录1. 简介2. 安装goaccess3. 启动goaccess1. 简介access日志记录了Nginx非常重要的信息,我们可以使用Nginx来分析定位问题;也可以用它来分析用户的运行数据;但是如果想要实时分析access.log相对比较困难有一款工具叫GoAccess,它可以以图像化的方式通过WebSoxket协议实时的把access.log的变迁反应到浏览器中方便我们分析问题;接下来我们来演示如何使用GoAccess工具来分析Nginx的access.log的日志中。样板:默认ac原创 2022-02-08 16:36:56 · 1624 阅读 · 0 评论 -
nginx【5】用 Nginx 搭建一个具备缓存功能的反向代理服务
文章目录1. 场景2. 反向代理3. 代理缓存1. 场景上游要处理复杂的业务逻辑和强调开发效率,所以性能一般,通过nginx作为反向代理,通过请求算法、负载均衡代理给多个上游服务提供工作,实现了水平扩展,业务无感知的情况下添加更多的上游服务,增强服务处理性能,当上游服务出现问题时,可以自动的把请求从有问题的服务转交给正常服务。上游服务不对公网提供访问2. 反向代理修改配置监听 127.0.0.1:8080,那么这个上游服务只能本地进程访问server { listen 127原创 2022-02-08 16:03:49 · 1131 阅读 · 0 评论 -
nginx【4】 搭建一个可用的静态资源 Web 服务器
文章目录1. 下载 [dlib](http://dlib.net/)2. 自定义配置3. 启动4. 模块4.1 gzip压缩4.2 audoindex目录显示4.3 limit_rate限制流量访问4.4 log_format日志格式1. 下载 dlib$ wget http://dlib.net/files/dlib-19.23.zip$ unzip dlib-19.23.zip$ rm -rf dlib-19.23.zip$ ls -l总用量 0drwx------ 2 nobody r原创 2022-02-08 00:51:55 · 593 阅读 · 0 评论 -
nginx【3】命令
文章目录1. 命令参数2. 重载配置文件3. 热部署4. 切割日志文件1. 命令参数2. 重载配置文件$ vim conf/nginx.conf.......tcp_nopush on; #注释取消.........$ ./nginx -s reload3. 热部署$ ps -ef |grep nginxroot 1077779 1 0 21:54 ? 00:00:00 nginx: master process ./nginxno原创 2022-02-07 22:16:26 · 145 阅读 · 0 评论 -
nginx【2】配置文件
Nginx配置语法每条指令以;分号结尾,指令与参数间以空格符号分隔配置文件由指令与指令块构成指令块以{}大括号将多条指令组织在一起使用#符号添加注释,提高可读性include语句允许组合多个配置文件以提升可维护性使用$符号使用变量部分指令的参数支持正则表达式指令块:httpserverlocationupstream...原创 2022-02-07 21:43:51 · 417 阅读 · 0 评论 -
陶辉Nginx核心知识100讲练习笔记
《Nginx核心知识100讲》资料原创 2022-02-07 14:42:48 · 528 阅读 · 0 评论 -
system服务配置nginx日志并定时备份清理详解
/etc/init.d/functions运用实战配置system服务详解在配置system nginx服务后,对其nginx日志进行自定义并定时备份清理。1. 配置systemd配置文件$ mkdir -p /etc/systemd/system/nginx.service.d/$ vim etc/systemd/system/nginx.service.d/nginx.conf[Service]SyslogIdentifier=nginx2. rsyslog配置单独的日志$ vi原创 2020-06-25 13:37:06 · 830 阅读 · 0 评论 -
Nginx【1】编译安装 Nginx
文章目录配置介绍编译下载nginxwget http://nginx.org/download/nginx-1.20.2.tar.gztar -zxvf nginx-1.20.2.tar.gz配置介绍$ ls -l总用量 788drwxr-xr-x 6 1001 1001 326 2月 7 11:10 auto-rw-r--r-- 1 1001 1001 312251 11月 16 22:44 CHANGES #版本特性-rw-r--r-- 1 1001 1001 4765原创 2022-02-07 12:17:06 · 918 阅读 · 0 评论