
Nginx
文章平均质量分 62
幽雨雨幽
C/C++软件工程师
展开
-
Linux下玩转nginx系列(八)---如何使用upsync模块实现动态负载均衡
一、HTTP动态负载均衡动态负载均衡动态负载均衡策略类似于加权轮询策略,可以通过对于后端服务器集群的状态监测,量化不同服务器的性能差异,来周期性调整服务器的比重来实现权重的动态调整。在nginx中传统的负载均衡,如果Upstream参数发生变化,每次都需要重新加载nginx.conf文件,因此扩展性不是很高,所以我们可以采用动态负载均衡,实现Upstream可配置化、动态化,无需人工重新加载nginx.conf。这类似分布式的配置中心。动态负载均衡实现方案Consul+Consul-template 每次转载 2022-12-07 17:56:27 · 442 阅读 · 0 评论 -
nginx代理多次302的解决方法(nginx Follow 302)
这篇文章主要介绍了nginx代理多次302的解决方法(nginx Follow 302),详细的介绍了解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧用proxy_intercept_errors和recursive_error_pages代理多次302302是HTTP协议中的一个经常被使用状态码,是多种重定向方式的一种,其语义经常被解释为“Moved Temporarily”。这里顺带提一下,现实中用到的302多为误用(与303,307混用),在HTTP/1转载 2022-05-06 11:13:12 · 18603 阅读 · 0 评论 -
nginx中resolver参数配置解释
地址:https://www.rootop.org/pages/4307.html原创 2021-08-10 18:15:50 · 1661 阅读 · 0 评论 -
nginx ngx_modules
在ngx_module.h中引用了两个至关重要的外部变量 12 extern ngx_module_t *ngx_modules[];extern char *ngx_module_names[]; ngx_modules跟ngx_module_names定义在ngx_modules.c中,这个文件并不存在于nginx源码中,在编译时执行configure动态生成。ngx_modules数组包含所有的Nginx模块,Nginx.转载 2021-04-01 14:38:38 · 943 阅读 · 0 评论 -
nginx启动期做了哪些事
nginx是个多进程web容器,不同的配置下它的启动方式也是不同的,这里我只说说最典型的启动方式。它有1个master进程,和多个worker进程(最优配置的数量与CPU核数相关)。那么,首先我们要找到main函数,它在src/core/nginx.c文件中。谈到源码了,这时我们先简单看下源码的目录结构吧。nginx主要有下列目录:src/core,这个目录存放了基础的数据结构像LIST、红黑树、...转载 2018-03-29 10:57:18 · 583 阅读 · 2 评论 -
Nginx的定时事件的实现(timer)
在前面的文章里面就说到了在事件循环中除了要处理所有的从epoll中获取的事件之外,还要处理一些timer事件,这篇文章就讲讲Nginx的timer是如何实现的。在讲Nginx的实现之前,我们可以先回顾一下linux的定时器的实现。在linux中通过每次系统定时器时钟的中断的中断处理程序来设置相应的软中断位,该软中断的中断处理程序目的就是为了扫描系统中所有挂起的定时器,如果他们已经超时的话,那么...转载 2018-09-28 17:28:43 · 4121 阅读 · 1 评论 -
nginx 源码学习笔记(二十一)—— event 模块(二) ——事件驱动核心ngx_process_events_and_timers
首先继续回忆下,之前子线程执行操作里面有一个未涉及的内容ngx_process_events_and_timers,今天我们就来研究下这个函数。本篇文章来自于:http://blog.youkuaiyun.com/lengzijian/article/details/7601730先来看一下第十九节的部分截图:今天主要讲解的就是事件驱动函数,图中的红色部分: [cpp] view pl...转载 2018-09-28 17:37:51 · 1499 阅读 · 0 评论 -
nginx源码初读(8)--让烦恼从数据结构开始(ngx_event)
nginx中的事件模块是一个很重要的模块,但这里作为初读,我们只简单看一下ngx_event的数据结构,至于模块和机制,留作之后再分析。下面是结构体ngx_event_t的代码:typedef struct ngx_event_s ngx_event_t;struct ngx_event_s { void *data; /* 事件上下文数据,...转载 2018-09-28 17:41:03 · 1174 阅读 · 0 评论 -
Nginx配置中的log_format用法梳理(设置详细的日志格式)
Nginx配置中的log_format用法梳理(设置详细的日志格式) nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式;另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,可以参加ngx_http_log_module。一般在nginx的配置文件中日记配置(/usr/local/nginx/conf/nginx.conf)。...转载 2018-10-08 09:56:53 · 2124 阅读 · 0 评论 -
关于ngx_trylock_accept_mutex的一些解释
关于nginx里面accept互斥锁的处理,群里讨论了很多次,很多人都提出了各种问题,比如问到:在ngx_process_events_and_timers中,为什么在释放ngx_accept_mutex之后,不把ngx_accept_mutex_held清零? if (ngx_accept_mutex_held) { ngx_shmtx_unlock(&ngx_...转载 2018-09-29 10:14:49 · 779 阅读 · 0 评论 -
Nginx日志配置远程Syslog采集
本文将指引你:如何对Nginx日志进行采集,并通过Syslog协议,自动实时的发送到远程的集中日志分析中心,便于集中式的日志存储和管理,提高网站的运维效率。第一步:初始化日志采集环境先确保系统中的/var/spool/rsyslog 目录已存在:mkdir -v /var/spool/rsyslogif [ "$(grep Ubuntu /etc/issue)" != "" ]; t...转载 2018-10-08 11:04:09 · 2802 阅读 · 0 评论 -
切割nginx日志
这几天自己看了下博客的nginx日志,发现日志文件发现越来越大。因为nginx自己不会对日志文件进行切割,所以打算通过其他方式进行切割,而且为了后续能对nginx日志文件里面记录的数据进行分析,所以打算按照天对其进行切割。PS:本篇文章所以的操作是在centos6.5 OS 64bit上进行。切割nginx日志,我们可以通过两种不同的方式进行,分别是:通过logrotate和通过she...转载 2018-10-08 15:28:09 · 394 阅读 · 0 评论 -
ngx_conf_s
《Nginx高性能Web服务器详解》第11章Nginx基本数据结构,本章开始,我们学习Nginx源码的具体实现。学习体系错综复杂、功能服务实现丰富的Nginx服务器源码,应该从整个源码体系赖以存在的基本元素--数据结构开始学起。本节为大家介绍ngx_conf_s结构体。作者:苗泽来源:电子工业出版社|2013-12-02 11:43 收藏 分享11.9 ngx_conf_s结构...转载 2018-10-22 17:33:26 · 810 阅读 · 0 评论 -
ngx_event_expire_timers
Nginx 中处理检查超时的定时器并处理//从ngx_event_timer_rbtree(定时器的红黑树中取出所有超时的定时器时间,并使用设定的handler处理该事件)voidngx_event_expire_timers(void){ ...转载 2018-09-28 16:58:15 · 803 阅读 · 0 评论 -
nginx超时设置
nginx常用的超时配置说明client_header_timeout语法 client_header_timeout time默认值 60s上下文 http server说明 指定等待client发送一个请求头的超时时间(例如:GET / HTTP/1.1).仅当在一次read中,没有收到请求头,才会算成超时。如果在超时时间内,client没发送任何东西,nginx返回HTTP状态码408(“R...转载 2018-05-28 16:07:17 · 1311 阅读 · 0 评论 -
nginx模块定制开发中介入http模块的方法及NGX_HTTP_CONTENT_PHASE阶段的详细介绍
ginx模块定制开发中,大多数都是针对http的模块的定制开发,比如添加一个打印“hello world”的功能、记录http请求内容、对http请求作出一个特殊响应等,此时,需要在nginx源码中的http模块中介入我们的定制代码,我们可以通过必定会被调用的postconfiguration方法,向全局的ngx_http_core_main_conf_t结构的phases[NGX_HTTP_LO...转载 2018-05-16 16:12:59 · 1200 阅读 · 0 评论 -
Nginx:作为缓存,支持Range回源
一、Range回源1.1 Nginx的Range回源、ngx_http_slice_module模块、--with-http_slice_module参数 Nginx的ngx_http_slice_module模块是用来支持Range回源的。 ngx_http_slice_module从Nginx的1.9.8版本开始有的。 启用ngx_http_slice...转载 2018-05-09 17:08:11 · 3200 阅读 · 0 评论 -
ngx_http_discard_request_body
http框架丢弃http请求包体和上一篇文章http框架接收包体, 都是由http框架提供的两个方法,供http各个模块调用,从而决定对包体做什么处理。是选择丢弃还是接收,都是由模块决定的。例如静态资源模块,如果接收到来自浏览器的get请求,请求某个文件时,则直接返回这个文件内容给浏览器就可以了。没有必要再接收包体数据,get请求实际上也不会有包体。因此静态资源模块将调用http框架提供的丢弃包体...转载 2018-05-17 10:19:02 · 826 阅读 · 0 评论 -
Nginx URL重写(rewrite)配置及信息详解
URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中Nginx URL重写(rewrite)介绍 和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要P...转载 2018-04-28 15:35:45 · 524 阅读 · 0 评论 -
Nginx Rewrite规则初探
Nginx rewrite(nginx url地址重写)Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。 if 指令规则语法:[pla...转载 2018-05-08 14:40:56 · 295 阅读 · 0 评论 -
http状态码301和302详解及区别
一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各种资料了解后,算是有了一定的理解。这里记录下,希望能有新的认识。大家也共勉。官方的比较简洁的说明: 301 redirect: 301 代表永久性转移(Permanently Moved) 302 redirect: 302 代表暂时性转移(Temporarily Moved ) p...转载 2018-05-08 16:48:57 · 103203 阅读 · 14 评论 -
nginx中的rewrite用法及实例
本文转载自http://blog.youkuaiyun.com/xy2204/article/details/47749405,本来想自己总结的,但还是觉得人家写的更好一些,所以就转载下来。最下面附有我的一个小例子。文:http://www.bo56.com/nginx-location%E5%9C%A8%E9%85%8D%E7%BD%AE%E4%B8%AD%E7%9A%84%E4%BC%98%E5%85%8...转载 2018-05-08 17:07:36 · 5115 阅读 · 2 评论 -
利用configure脚本将定制的模块加入到Nginx中
在1.6节提到的configure执行流程中,其中有两行脚本负责将第三方模块加入到Nginx中,如下所示。. auto/modules. auto/make下面完整地解释一下configure脚本是如何与3.3.1节中提到的config文件配合起来把定制的第三方模块加入到Nginx中的。在执行configure --add-module=PATH命令时,PATH就是第三方模块所在的路径。在conf...转载 2018-05-22 10:54:49 · 914 阅读 · 0 评论 -
nginx源码分析configure脚本详解
一、前言 在分析源码时,经常可以看到类似 #if (NGX_PCRE) .... #endif 这样的代码段,这样的设计可以在不改动源码的情况下,通过简单的定义宏的方式来实现功能的打开与关闭,但是在nginx/src目录下始终没有找到宏 NGX_PCRE 对应的 #define 语句。 在之前介绍event模块的时候,讲到init_cycle函数中对cycle进行了初始化,其中很重...转载 2018-05-22 11:00:47 · 824 阅读 · 0 评论 -
New Config Shell File
With NGINX 1.9.11 onwards the way config shell file should be written has changed. It is still compatible with the old method but the new method should be used if the module is intended to be a dynami...转载 2018-05-22 14:52:46 · 414 阅读 · 0 评论 -
nginx模块开发—HTTP初始化之listen
1、知识百科nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解。与网络有关的配置命令主要有两个:listen和sever_name。listen命令设置nginx监听地址,对于IP协议,这个地址就是address和port,对于UNIX域套接字协议,这个地址就是path,一条listen指令只能指定一个address或者port,...转载 2018-11-09 10:41:29 · 1326 阅读 · 0 评论 -
nginx phase handler的原理和选择
nginx phase handler的原理和选择PHASE HANDLER的种类nginx在接收并解析完请求行,请求头之后,就会依次调用各个phase handler。 phase handler是完成nginx主要功能的阶段。Nginx有如下11种phase,phase会依次执行。同一个phase,可能会挂载多个handler。其中斜体加粗的phase,不允许挂载用户自定义的handl...转载 2018-11-07 10:37:53 · 347 阅读 · 0 评论 -
nginx源码分析之变量
nginx中的变量在nginx中的使用非常的多,正因为变量的存在,使得nginx在配置上变得非常灵活。我们知道,在nginx的配置文件中,配合变量,我们可以动态的得到我们想要的值。最常见的使用是,我们在写access_log的格式时,需要用到多很多变量。 而这些变量是如何工作的呢?我们可以输出哪些变量?我们又怎么才能输出自己想要的内容呢?当然,我们可能还想知道,如何在我们的模块里面去使用变量,...转载 2018-11-15 10:18:02 · 636 阅读 · 0 评论 -
Linux下进程间通讯方式 - UNIX Domain Socket
概述Linux下进程通讯方式有很多,比较典型的有套接字,平时比较常用的套接字是基于TCP/IP协议的,适用于两台不同主机上两个进程间通信, 通信之前需要指定IP地址. 但是如果同一台主机上两个进程间通信用套接字,还需要指定ip地址,有点过于繁琐. 这个时候就需要用到UNIX Domain Socket, 简称UDS, UDS的优势:UDS传输不需要经过网络协议栈,不需要打包拆包等操作,只是...转载 2018-11-20 11:00:15 · 1558 阅读 · 0 评论 -
EPOLL事件之EPOLLRDHUP
在对系统问题进行排查时,我发现了一个奇怪的现象:明明是对方断开连接,系统却报告一个查询失败的错误,但从用户角度来看请求的结果正常返回,没有任何问题。对这个现象深入分析后发现,这是一个基于epoll的连接池实现上的问题,或者说是特性。首先解释一下导致这个现象的原因。在使用epoll时,对端正常断开连接(调用close()),在服务器端会触发一个epoll事件。在低于2.6.17版本的内核...转载 2018-11-28 10:27:28 · 1494 阅读 · 0 评论 -
Nginx upstream (一) 整体流程分析
Nginx访问上游服务器的流程大致分以下几个阶段:启动upstream、连接上游服务器、向上游发送请求、接收上游响应(包头/包体)、结束请求。本篇主要从代码流程的角度,梳理一下upstream的整个的数据的处理流程。下面先看一下upstream相关的两个重要数据结构ngx_http_upstream_t和ngx_http_upstream_conf_t:相关数据结构typedef stru...转载 2018-12-13 17:35:20 · 3838 阅读 · 0 评论 -
nginx动态配置及服务发现那些事
标题, 《闲聊nginx动态配置及服务发现的那些事》 … 这次的准备闲聊关于nginx服务发现的话题, 按照我以往写文章的性子,估计会迁移一些主题. 毕竟单纯聊nginx和动态服务发现没啥意思,因我以前的文章有大量的涉及到。 该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新. http://xiaorui.cc/?p=3855 ...转载 2019-01-08 14:58:54 · 1127 阅读 · 0 评论 -
Nginx容器动态流量管理方案-nginx-upsync-module+nginx_upstream_check_module初体验
缘起最近一直在研究日志收集系统的框架,之前在线游戏的数据发送都是由游戏服务器发送的,我来之前一直是rsync传输,也还算稳定。但现在上了单机游戏,只能由手机客户端直接发送,dau比较高,最近很火的<<贪吃蛇>>在海外上线,一个星期dau已经达到千万级别。初步方案,lvs做4层负载均衡,下挂nginx做7层转发,数据直接入kafaka。一直不太喜欢通过reload修改ngi...转载 2019-01-08 16:28:54 · 1118 阅读 · 1 评论 -
nginx断点续传
有些时候客户端可能只需要请求nginx服务器上的部分数据, 例如: 我们在看电影时, 常常拖动快进条,跳到指定的位置开始观看。 这其实是nginx的断点续传功能, 从指定位置开始观看,相当于向nginx服务器请求某个位置开始的以后的内容。假设nginx服务器上有一个文件,文件的内容为: "0123456789abcdef"一共16个字节。如果客户端只需要2345共4个字节的数据, 则可以在http...转载 2019-01-16 11:27:19 · 5946 阅读 · 0 评论 -
浅谈 URI 及其转义
浅谈 URI 及其转义URIURI,全称是 Uniform Resource Identifiers,即统一资源标识符,用于在互联网上标识一个资源,比如 https://www.upyun.com/products/cdn 这个 URI,指向的是一张漂亮的,描述又拍云 CDN 产品特性的网页。URI 的组成完整的 URI,由四个主要的部分构成:<scheme>://...转载 2019-02-12 14:26:24 · 2556 阅读 · 0 评论 -
nginx--可扩展数组和数组排序
一、引言 之前了解到C++中的vector的时候没有怎么在意。现在阅读nginx源码时,发现了nginx中很多利用C语言对一些数据结构的实现,很不错。本文主要总结一下,nginx中可扩展数组的实现以及一个相关的sort接口。二、数据结构 C中数据结构是所有高级操作的基础,这里也不例外。typedef struct { void *elts; ...转载 2019-05-28 15:32:02 · 476 阅读 · 0 评论 -
Nginx HTTP之请求行解析函数ngx_http_parse_request_line
Nginx的HTTP模块中使用ngx_http_parse_request_line函数来对读取的请求行进行解析,HTTP请求行的格式不是很复杂,但是要注意HTTP 0.9与1.0、1.1之间的区别;另外,作为Nginx的第一个版本,里面支持的请求方法也只有GET、POST和HEAD。/* http/ngx_http_parse.c */ /* 解析HTTP请求行 * param r:...转载 2018-11-16 11:27:49 · 1789 阅读 · 0 评论 -
Nginx源码阅读(ngx_http_process_request_line)
ngx_http_process_request_line()static voidngx_http_process_request_line(ngx_event_t *rev){ ssize_t n; ngx_int_t rc, rv; ngx_str_t host; ngx_conn...转载 2018-11-16 10:51:05 · 498 阅读 · 0 评论 -
Nginx模块开发中使用PCRE正则表达式匹配
Nginx内部对pcre库的常用操作进行了封装. 封装的源码位于nginx/src/core/ngx_regex.c, 同时将pcre内使用的内存池更变为了Nginx的内存池. pcre_compile: Nginx封装了pcre_compile方法. 方法名为ngx_regex_compile. ngx_regex_compile方法的参数需要传入一个ngx_regex_compi...转载 2018-11-14 11:16:29 · 1825 阅读 · 0 评论 -
linux ngx listen的解析
listen的解析:ngx_http_core_listen方法:- 调用ngx_parse_url解析url。- 初始化ngx_http_listen_opt_t结构lsopt- 调用ngx_sock_ntop初始化lsopt.addr为点分十进制IP。- 处理listen的其他配置参数,如:backlog= ,rcvbuf=, sndbuf=, ssl, so_keepal...转载 2018-11-13 14:55:21 · 447 阅读 · 0 评论