Nginx
文章平均质量分 86
Linux服务器开发
C/C++Linux后台服务器开发高级架构师内容包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,音视频开发,Linux内核,TCP/IP,协程,DPDK多个高级知识点。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
Nginx再次回顾也许你已经忘记了Nginx是做什么的?我来再次给你夯实一下概念。多协议反向代理Nginx是个高性能的Web和反向代理服务器及HTTP服务器,它能反向代理HTTP,HTTPS和邮件相关(SMTP,POP3,IMAP)的协议链接,还可以提供了负载均衡以及HTTP缓存。原创 2023-02-03 15:16:12 · 1373 阅读 · 0 评论 -
Nginx负载均衡配置、限流配置、Https配置详解
通过proxy_pass 可以把请求代理至后端服务,但是为了实现更高的负载及性能, 我们的后端服务通常是多个, 这个是时候可以通过upstream 模块实现负载均衡。原创 2022-11-24 15:17:37 · 962 阅读 · 0 评论 -
Nginx 模块开发
在过滤模块中,所有输出的内容都是通过一条单链表所组成,Nginx都是读到一部分的内容就放到链表,然后输出出去(ngx_http_write_filter_module)。Nginx把 HTTP响应头的存储方式想象成一个 hash 表,在 Nginx 内部可以很方便地查找和修改各个响应头部,ngx_http_header_filter_module 过滤模块把所有的 HTTP 头组合成一个完整的 buffer,最终 ngx_http_write_filter_module 过滤模块把 buffer 输出。原创 2022-09-15 16:49:19 · 542 阅读 · 0 评论 -
万字多图,搞懂 Nginx 高性能网络工作原理!
在单进程的网络编程模型中。所有的网络相关的动作都是在一个进程里完成的,如监听 socket 的创建, bind、listen。再比如 epoll 的创建、要监听事件的添加,以及 epoll_wait 等待时间发生。这些统统都是在一个进程里搞定。一个客户端和使用了 epoll 的服务端的交互过程如下图所示。以下是其大概的代码示例(没耐心看的同学可以先)。在单进程模型中,不管有多少的连接,是几万还是几十万,服务器都是通过 epoll 来监控这些连接 socket 上的可读和可写事件。当某个 socket原创 2022-07-11 16:46:49 · 263 阅读 · 0 评论 -
深入浅出Nginx实战与架构原理
本文主要内容如下(让读者朋友们深入浅出地理解Nginx,有代码有示例有图): 1.Nginx是什么? 2.Nginx具有哪些功能? 3.Nginx的应用场景有哪些? 4.Nginx的衍生生态有哪些? 5.Nginx开源相关资料有哪些? 6.Nginx怎么样安装? 7.Nginx常用的配置包含哪些?以及是怎么配置的? 8.Nginx的安全策略需要从哪些方面考虑? 9.Nginx架构是怎样的? 10.总结 一、N原创 2022-05-31 16:17:49 · 621 阅读 · 0 评论 -
避免惊群以及负载均衡的原理与具体实现
一、惊群效应1、发生惊群效应的原因1)使用accept主进程(master进程)fork出⼀批⼦进程(worker进程),⼦进程继承了⽗进程的监听端⼝(sockfd),就会出现accept惊群效应。子进程的fd属于同一个文件,若两个⼦进程同时调⽤accept进⾏阻塞监听,两个进程都会被挂起来,内核会在这个socket的等待队列wait queue链表中将两个PID记录下来以便唤醒。Linux2.6版本之后引⼊了⼀个标记为WQ_FLAG_EXCLUSIVE解决了这种惊群效应。这个在内核就已经处理了原创 2022-05-24 15:49:31 · 314 阅读 · 0 评论 -
后台开发【一大波有用知识】Nginx数据结构剖析
Nginx数据结构就是nginx源码里面该怎么去看里面有哪些东西?核心的第一点就是把基础组建这一块,就是把我们在nginx源码里面的一些数据结构,得需要捋一遍。数据结构这里面包含哪些东西,,就现在凭你自己现在自己,你认为做一款开源的项目,这里面有哪些组件是我们有必要要了解的,第一个大家可以想象,首先对于字符串的处理字符的处理,这个肯定是有的。第二个对于内存的处理我们也是需要有的,我们对于文件的操作也是需要有的,就是对于这索引hash它是需要有的,还有类似于红黑树也是需要有,还有呢比如原创 2022-05-09 17:21:02 · 190 阅读 · 0 评论 -
这是我见过最详细的Nginx 内存池分析
一,为什么要使用内存池 大多数的解释不外乎提升程序的处理性能及减小内存中的碎片,对于性能优化这点主要体现在: (1)系统的malloc/free等内存申请函数涉及到较多的处理,如申请时合适空间的查找,释放时的空间合并。 (2)默认的内存管理函数还会考虑多线程的应用,加锁操作会增加开销。 (3)每次申请内存的系统态与用户态的切换也及为的消耗性能。 对于由于应用的频繁的在堆上分配及释放空间所带来的内存碎片化,其实主流的思想是认为存在的,不过也有人认为这种考虑其实是多余的,在“内存池到..原创 2022-03-15 15:30:42 · 2514 阅读 · 0 评论 -
Nginx高效的原因,你都了解了吗
导读研发朋友们对应用过载就扩容这个动作已是非常的熟悉,但大家有听说过业务流量突增,nginx也随之需要扩容嘛?我相信很少听过,为什么呢?主要是nginx高效工作起作用,那接下来我们来讲讲我们nginx为何高效。一. Nginx 为何神物Nginx 是一种异步框架的web服务器,它可以用作反向代理、负载均衡器和 HTTP 缓存或邮件服务器。Nginx 是免费且开源的,根据类 BSD 许可证的条款发布,意味任何人都可以下载甚至修改源码。Nginx 软件由伊戈尔·赛索耶夫创建并于 2004 年首次公开原创 2021-09-04 15:10:47 · 1912 阅读 · 0 评论 -
Nginx 多进程连接请求/事件分发流程分析及惊群分析
Nginx使用多进程的方法进行任务处理,每个worker进程只有一个线程,单线程循环处理全部监听的事件。本文重点分析一下多进程间的负载均衡问题以及Nginx多进程事件处理流程,方便大家自己写程序的时候借鉴。一、监听建立流程整个建立监听socket到accept的过程如下图:说明:1.main里面调用ngx_init_cycle(src/core/ngx_cycle.c),ngx_init_cycle里面完成很多基本的配置,如文件,共享内存,socket等。2.上图左上角是ngx_原创 2021-08-30 17:57:46 · 464 阅读 · 0 评论 -
Nginx 内存池似懂非懂?一文带你看清高性能服务器内存池
nginx 内存池 ngx_pool_tnginx 是自己实现了内存池的,所以在nginx ngx_pool_t 这个结构也随处可见,这里主要分析一下内存池的分配逻辑。内存池实现了包括小块内存、大块内存和清理资源几种资源的处理,应该来说覆盖了绝大数的使用场景了。文章相关视频讲解:C/C++Linux后台服务器开发高级架构师免费学习链接:C/C++Linux服务器开发高级架构师/Linux后台架构师-学习视频高性能服务器为什么需要内存池?内存如何分配? 如何设计内存 ?Nginx源码分原创 2021-08-02 15:59:19 · 264 阅读 · 0 评论 -
Nginx学习之Nginx高性能的实现原理
Nginx 采用的是多进程(单线程) & 多路IO复用模型,使用了 I/O 多路复用技术的 Nginx,就成了”并发事件驱动“的服务器,同时使用sendfile等技术,最终实现了高性能。主要从以下几个方面讲述Nginx高性能机制:Nginx master-worker进程机制。 IO多路复用机制。 Accept锁及REUSEPORT机制。 sendfile零拷贝机制1、Nginx进程机制 1.1、Nginx进程机制概述 许多web服务器和应用服务器使用简单的线程的(threa原创 2021-07-03 15:57:51 · 1036 阅读 · 2 评论 -
Nginx的进程管理与重载原理
目录进程结构图 信号量管理 Linux的信号量管理机制 利用信号量管理Nginx进程 配置文件重载原理C/C++ Linux服务器开发高级架构学习视频点击:C/C++Linux服务器开发/Linux后台架构师-学习视频教程进程结构图Nginx是多进程结构,多进程结构设计是为了保证Nginx的高可用高可靠,包含:master进程:父进程,负责worker进程的管理 worker进程:子进程,worker进程一般配置与服务器CPU核数相同,worker进程用来处理具体请求。原创 2021-06-29 15:27:21 · 493 阅读 · 0 评论 -
Linux环境,手把手带你实现一个Nginx模块,深入了解Nginx丨惊群效应|error|负载均衡|Openresty丨C/C++Linux服务器开发丨中间件
Linux环境,手把手带你实现一个Nginx模块,深入了解Nginx视频讲解如下,点击观看:Linux环境,手把手带你实现一个Nginx模块,深入了解Nginx丨惊群效应|error|负载均衡|Openresty丨C/C++Linux服务器开发丨中间件C/C++Linux服务器开发高级架构师知识点精彩内容包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,音视频开发,Linux内核,Docker,TCP/IP,协程,DPDK多个原创 2021-06-05 17:23:59 · 138 阅读 · 0 评论 -
网络四层、七层负载均衡的区别
一、简介 ** 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;**同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址;三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址;四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器;七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器。 ** 所谓的四到七层负载均衡,就是在对...原创 2021-06-01 21:02:45 · 1026 阅读 · 0 评论 -
Nginx-接入层Nginx架构及模块介绍
文章简介:1)帮助大家对Nginx有一定的认识2)熟悉Nginx有哪些应用场景3)熟悉Nginx特点和架构模型以及相关流程4)熟悉Nginx定制化开发的几种模块分类文章相关视频讲解:C/C++ Linux服务器开发高级架构学习视频点击观看:c/c++Linux后台服务器开发高级架构师视频资料Nginx源码从模块开发入手,3个项目弄透nginx模块开发后端开发组件,Nginx从模块开始,让你对Nginx有全新的理解1. Nginx简介以及特点1. Nginx简介以及.原创 2021-05-14 21:13:15 · 843 阅读 · 14 评论 -
理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式丨C++后端开发丨Linux服务器开发丨web服务器
理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式1. 开闭、单一职责、里氏替换、接口隔离等设计原则2. 随处可见的模板方法3. nginx中核心设计模式 责任链模式4. 责任链与装饰器模式的区别视频讲解如下,点击观看:理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式丨C++后端开发丨Linux服务器开发丨web服务器丨中间件开发丨分布式C/C++Linux服务器开发精彩内容包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Re原创 2021-04-24 15:54:30 · 368 阅读 · 0 评论 -
Nginx 核心模块与配置实践丨Nginx模版开发丨C++后端开发
Nginx 核心模块与配置实践概要:Nginx 简介 Nginx 架构说明 Nginx 基础配置与使用1. Nginx 简介与安装知识点:Nginx 简介 Nginx 编译与安装 Nginx 模块更新关于Nginx模块开发,大家可以看看这个视频讲解点击:3个项目弄透nginx模块开发1.1 Nginx简介Nginx是一个高性能WEB服务器,除它之外Apache、Tomcat、Jetty、IIS,它们都是Web服务器,或者叫做WWW(World Wide Web)服务器,相原创 2021-04-13 20:47:56 · 266 阅读 · 0 评论 -
Nginx源码从模块开发入手,3个项目弄透nginx模块开发丨Linux服务器开发丨C++后端开发丨中间件开发丨分布式丨web服务器
Nginx源码从模块开发入手,3个项目弄透nginx模块开发1. Nginx http请求的11个处理流程2. Upstream, Filter,Handler模块分析3. nginx如何拒绝无效请求视频讲解如下,点击观看:Nginx源码从模块开发入手,3个项目弄透nginx模块开发丨Linux服务器开发丨C++后端开发丨中间件开发丨分布式丨web服务器C/C++Linux服务器开发精彩内容包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,Z原创 2021-04-13 16:27:12 · 225 阅读 · 1 评论 -
epoll惊群效应深度剖析
epoll惊群效应深度剖析前情提要我们一个基于Nginx+uWSGI+python的服务最近在高峰期经常会遇到负载高导致一些请求报错的情况,在单机qps只有差不多2000-3000左右的时候内核的cpu占用竟然高达超过20%,内核每秒上下文切换超过200w次,分析之后发现是nginx+uwsgi引发了惊群效应,导致性能急剧下降,通过上锁解决惊群问题之后服务恢复。基于这个排查过程,再加上我之前写过的关于epoll的分析最后也把惊群效应一笔带过,当时没有写完整,那咱这次就好好聊聊这个话题,我会先详细原创 2021-04-09 20:53:20 · 430 阅读 · 0 评论 -
16w行的nginx源码,如何分拆模块阅读,手把手教你造轮子丨Nginx模块开发丨C/C++丨Linux服务器开发丨后端开发
16w行的nginx源码,如何分拆模块阅读,让你明白轮子如何造1.多进程模型下的惊群处理2.内存池的代码封装3.slab共享内存分配视频讲解如下,点击观看:16w行的nginx源码,如何分拆模块阅读,手把手教你造轮子丨Nginx模块开发丨C/C++丨Linux服务器开发丨后端开发丨中间件开发丨web服务器C/C++Linux服务器开发精彩内容包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,音视频开发,Linux...原创 2021-04-01 21:43:29 · 341 阅读 · 2 评论 -
后端开发必备——Nginx篇
概要防盗链 根据文件类型设置过期时间 静态资源访问 日志配置 日志字段说明 access_log 访问日志 error_log 日志 日志切割 反向代理 禁止指定user_agent nginx访问控制 负载均衡防盗链location ~* \.(gif|jpg|png)$ { # 只允许 192.168.0.1 请求资源 valid_referers none blocked 192.168.0.1; if ($invalid_refer原创 2021-03-29 16:25:21 · 393 阅读 · 0 评论 -
C++后端程序员必须彻底搞懂Nginx,从原理到实战详解
本文首先介绍 Nginx 的反向代理、负载均衡、动静分离和高可用的原理,随后详解 Nginx 的配置文件,最后通过实际案例实现 Nginx 反向代理和负载均衡的具体配置。学会 Nginx ,一篇足够了。1. 简介 Nginx 是开源的轻量级 Web 服务器、反向代理服务器,以及负载均衡器和 HTTP 缓存器。其特点是高并发,高性能和低内存。 Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,最大能支持 50000 个并发连接数。 Nginx 还支持热原创 2021-03-04 16:40:13 · 916 阅读 · 1 评论 -
从nginx“惊群”问题来看高并发锁的方案
从nginx“惊群”问题来看高并发锁的方案1.惊群的现象与原因2.互斥锁/自旋锁3.原子操作CAS的实现视频讲解如下,点击观看:从nginx“惊群”问题来看高并发锁的方案丨零声学院官方推广视频C/C++Linux服务器开发精彩内容包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,Linux内核,Docker,TCP/IP,协程,DPDK多个高级知识点分享。点击链接订阅后直接观看:C/C++Linux服务器开...原创 2021-02-26 14:12:51 · 224 阅读 · 1 评论 -
nginx 多进程 + io多路复用 实现高并发
一、nginx 高并发原理简单介绍:nginx 采用的是多进程(单线程) + io多路复用(epoll)模型 实现高并发二、nginx 多进程 启动nginx 解析初始化配置文件后会 创建(fork)一个master进程 之后 这个进程会退出master 进程会 变为孤儿进程 由init进程托管。(可以通过python 或php 启动后创建子进程,然后杀死父进程得见子进程会由init进程托管)如下图可以看到nginx master 进程由init(ppid 为1 )进程管理。.原创 2021-01-22 16:46:00 · 2345 阅读 · 5 评论 -
nginx源码学习----内存池详解
最近在进行监控平台的设计,之前一直觉得C/C++中最棘手的部分是内存的管理上,远不止new/delete、malloc/free这么简单。随着代码量的递增,程序结构复杂度的提高。各种内存方面的问题悄然滋生。而且作为平台,后期的插件扩展在所难免。长时间运行的采集平台的特性更是提出了对稳定性的高要求。不是c#、java,没有虚拟机为你管理内存,一切都要靠自己。于是想看看nginx、python、lua这些C的经典之作在内存管理这块“要地”又是如何处理的。先来看看nginx吧,因为网上都说nginx的内存池设原创 2021-01-19 16:29:12 · 291 阅读 · 1 评论 -
网络IO模型的介绍引出nginx的网络IO模型
1. 什么是IO? 简单来说就是输入输出2. 网络IO经历步骤用户在获取网络资源是在进入网卡,经过网络七层模型将请求交给nginx用户进程 用户进程无法直接获取磁盘上的资源,会将请求获取什么资源翻译并转发给内核,内核驱动磁盘寻道找到文件(最耗时间的环节) 文件同样也不能直接交给用户进程,首先磁盘将文件放至内核缓冲区,然后内核告知用户进程请求的资源结果已准备好(耗时比较短) 内核缓冲区将文件拷贝一份至用户进程缓冲区,用户进程拿到文件 构建响应报文,通过http回传给用户总结:.原创 2020-12-26 16:48:47 · 295 阅读 · 2 评论 -
【Linux后台开发系列】Nginx源码从模块开发开始,不再对nginx源码陌生丨源码分析
Nginx源码从模块开发开始,不再对nginx源码发怵,值得学习,认真听完。1. nginx的conf配置,cmd解析2. nginx模块的八股文3. nginx开发的细枝末节【Linux后台开发系列】Nginx源码从模块开发开始,不再对nginx源码陌生丨源码分析更多精彩内容包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,Linux内核,Docker,TCP/IP,协程,DPDK多个高级知识点分享。点击:ht...原创 2020-12-22 19:49:56 · 300 阅读 · 1 评论 -
为什么我推荐Nginx作为后端服务器代理
1. 前言我们真实的服务器不应该直接暴露到公网上去,否则更加容易泄露服务器的信息,也更加容易受到攻击。一个比较“平民化”的方案是使用Nginx反向代理它。今天就来聊一聊使用Nginx反向代理的一些能力,Nginx代理能帮助我们实现很多非常有效的API控制功能。这也解释了我为什么一直推荐使用Nginx来代理我们的Spring Boot应用。2. Nginx可以提供哪些能力Nginx已经不用太多的赞美了,它已经得到了业界的广泛认可。我们就聊聊它具体能够实现什么功能。2.1 代理能力这是针对服原创 2020-12-17 16:47:17 · 384 阅读 · 1 评论
分享