`
deyimsf
  • 浏览: 67938 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
                                                         》变量和脚本              ngx中的变量         ngx变量实现(上)         ngx变量实现(下)         ngx中的脚本(理论篇)         ngx中的脚本(实战篇)     》深入理解location匹配规则     》双面if     》阶段和指令执行顺序         分阶段执行的http模块        指令的执行顺序     》ngx中的基本数据结构使用和实现        数组        ...

模块化的ngx

提到ngx,一个永远绕不开的概念就是“模块”,模块在ngx中扮演者举足轻重的角色,你甚至可以认为在ngx中一切都是模块,它是一种或多种功能的一个组合体,是ngx实现灵活扩展的一个基本保障。   其实这个模块的概念跟积木 ...

写一个核心模块

在上一篇中有提到目前ngx共有六种模块,分别是: NGX_CORE_MODULE NGX_CONF_MODULE NGX_HTTP_MODULE NGX_MAIL_MODULE NGX_EVENT_MODULE NGX_STREAM_MODULE 如果按照一种更抽象的方式来划分,除了NGX_CONF_MODULE外,我们基本上可以把ngx模块类型划分为两种,一种是核心类型(NGX_CORE_MODULE),另一种是非核心类型。   核心类型模块主要用来搭建ngx基础功能和为非核心类型模块起支撑作用,比如核心模块src/http/ngx_http.c的主要作用 ...
  在我们接触的大部分计算机语言中,代码的执行都是有顺序的,而且大部分都是“过程性的”,通俗点就是代码的执行顺序跟书写顺序是一致的。如果把nginx的配置文件看成是一个“微型语言”,那么nginx中的指令,我们自然 ...

关于阶段

阶段一词来自于英文中的phase,对于刚接触nginx的同学来说,即便翻遍nginx的官方文档,你也不太可能找到官方对它的解释,因为它只是nginx的一个内部实现机制,是nginx处理http请求的一个固定流程或步骤。   在计算机程序的世界里,通常在做一件复杂功能的时候,为了让其更有调理,效率更高或者把功能变的不那么复杂。一般都会把功能进行相应的拆解,将其拆成更小的功能,然后再设定一套固有的流程或步骤来调度这些小功能,并最终完成整个复杂的大功能。并且在这期间,每个小功能都各司其职,不敢(不会)越雷霆半步。   对于上面说到的固有流程或步骤,一个比较接近的例子是在网络上传输数据用到的 ...

双面if

  在介绍nginx变量时我们说过,nginx具有语言的特性,并为此举了大量的例子,以及讲解了一些它的实现方式。而今天,我们将要介绍nginx的另外一个语言特性:if判断语句。以及if的另外一个非语言特性:location,是的,你没有 ...
在前面几篇文章中,为了表述某个问题,我们都会举例说明,其中用的最多的都是以locaiton开头的配置例子,形式基本如下:   location / {     // 一些指令 }   特别是在ngx中的变量中出现的最多,它就是我们这篇文章要介绍的核心内容。  
上一篇基本以理论为主,介绍了ngx中脚本实现的基本要素,这一篇以如何编译为切入点,通过实际例子,来详细介绍ngx如何通过脚本来完成变量支持的。   1从复杂值(complex value)开始    在nginx的整个配置文件中,并非所有的配置项都涉及编译概念,对于如下nginx配置:   location / {
按照常规的打法或者按照常规的思路,针对变量的开发,也就是我们在ngx变量实现原理中介绍的那样:定义指令、设计结构体保存指令值、设计方法支持变量插入、利用自带的方法创建注册变量、利用自带的方法获取变量值等 ...
上一篇主要描述的是变量的使用,所以没涉及任何代码,而这一篇主要描述变量的实现原理,避免不了会涉及到一些底层代码,对于不了解c语言的同学读起来可能会有点吃力,这部分同学可以尝试一下两篇结合着读,比如先读 ...
这是Nginx中变量的实现下篇,上篇可以点这里     1.初始化变量    尽管是同一个变量,但在定义和索引的时候nginx会创建两个ngx_http_variable_t结构体,然后分别存在于两个不同的容器中。一般情况下定义变量的时候该变量携 ...

Nginx中的变量

     在计算机语言中,变量是用来存储和表示数据的,但不同的语言表示变量的方式不同,像java语言会把变量抽象成各种类型,并且每种类型都会用一个特殊的符号表示,比如表示一个整数需要这样:      int age = 25; 用int去声明age是一个变量,并且是一个表示整数的变量。        另外一种语言比如lua,在使用的时候并不需要预先声明其类型,他可以在程序运行的时候确定变量的类型,甚至在变量前面都不需要任何关键字直接拿来就用,比如:      age = 25;      name = “张三”; 在没有任何征兆的情况下就定义了两个变量,而且该语言会动态 ...
概述 前段时间陆陆续续有一些同事跟我询问中文乱码问题,每个人的问题也都大同小异。而我最早之前也一直想写一篇这样的文章,无奈都腾不出富裕的时间,或者说拖延症比较严重(其实还是懒),这次就索性对自己狠一把,对这个问题做一个总结。 我们知道http协议是请求-响应式的,平常出现的乱码问题也就都隐藏在这一问一答之中,如果能明白字符在这个期间所走的链路,以及在这个链路中都经历了怎样的字符转换,那么遇到任何烦人的乱码问题也能够迎刃而解。 下面我会根据自身工作中的经历,讲述基于http协议在开发过程中遇到的字符乱码问题。 响应(response)时遇到的乱码问题 两千多年前孔子看见颜回煮饭时先偷偷吃了 ...

URL编码

URL编码又称为百分号编码,编码方式很简单,就是把单个字节用16进制表示,然后在其前面放置一个百分号。 比如有"abc"这样一个串,我们把他转换成ascii的字节序后,用16进制表示成这样:         61 62 63 把他进行百分号编码 ...
系统背景     几乎所有的互联网系统从开始都是一体化设计的,基本上所有的功能代码都是耦合在一起的。后续随着用户的不断增多业务也越来越多样化,系统需要的维护人员也会越来越多,相应的系统的复杂度、稳定性、可维护性也就越来越难控制,这时系统的拆分以及服务化就成了必然的选择。     系统被拆分后实现方式也就多样化起来,各个系统可以根据自己的业务需求、技术特性、方便程度、甚至个人喜好来选择使用不同的语言;服务化后各种功能被拆分的越来越细,原来可能一次请求能够完成的事,现在就需要多次请求并将结果进行融合。      服务化的好处是系统的职责变得清晰,可以突破单一资源限制等,比如突破数据库连接资源的限制( ...
Global site tag (gtag.js) - Google Analytics