先梳理他的基本流程,就可以知道什么阶段可以做好什么事
本文可能不易于不便于阅读,因为这个更多的是我思路的总结。是一个脉络的概述。
至于阶段理解的各个模块的具体参数,可以再自行搜索。
如有不便之处,敬请谅解。

1. 处理流程是什么?

1.1 处理流程

Nginx 处理的核心框架设计

clipboard.png

看清里面的流程箭头方向。

对应的11个阶段的模块

clipboard.png

按照不同模块的顺序,下面的模块可以自动使用上面模块的变量和结果。

1.2 对应的顺序

clipboard.png

每一个阶段,不同的模块也是有顺序的

1 : 使用了 auto_index 没有显示目录结构,仍然显示具体的html 文件内容
是因为 index 有更高的优先级

  1. 变量的使用

是 : 先解析所有的变量配置,加载到内存 。再统一使用

如果介绍一个HTTP模块,需要先分清楚 它属于哪一个模块,它是哪一个阶段生效的

1.10 对应的脑图

clipboard.png

2. 各模块的功能

2.1 realip

为什么有realip模块。

clipboard.png

real_ip 只有一个
X-Forwarded-For 经过的每一个代理服务器

2.2 Rewrite 模块

2.2.1 直接返回的指令 : (不向下执行)

    1. return
    1. error_page
return 403;
return 404 "find nothing!";
1. error_page 404 /404.html;

2. error_page 500 502 503 504 /50x.html;

3. error_page 404 =200 /empty.gif;

4. error_page 404 = /404.php;

5. location / { 
       error_page 404 = @fallback; 
   } 
   location @fallback { 
      proxy_pass http://backend; 
   }

6. error_page 403 http://example.com/forbidden.html;

7. error_page 404 =301 http://example.com/notfound.html;
  • 3.rewrite

语法 :

rewrite regex replacement [flag];

2.2.2 location

仅仅匹配URI,忽略参数
location : 目的是匹配选择合适的 server 配置项。

可以从客户端发来的请求的connection 报文的流动来思考

clipboard.png

2.3 limit_conn

在进行请求分析之前,为客户端的连接数做一定的访问限制。
为每个connection ,每个客户端的connection 数量

2.4 limit_req

每个connection 的request num /sec
leaky bucket

clipboard.png

2.5 access 模块

前面的更多的是 限制连接数,限制请求数,限制速度。

如果想根据 参数不同的,限制来源,增加权限

2.5.1 allow 和 deny

可以通过 allow 和 deny 做简单的ip 来源限制

2.5.2 auth_basic 基本的验证

通过一个密码文件,验证用户的登录名和密码

clipboard.png

2.5.3 auth_request

交给上游服务器,可以由一定的业务来判断

原理: 收到请求后,通过反向代理技术把请求传递给上游服务

2.5.4 staisfy 指令

clipboard.png

所有并不是 access 模块,所有的指令都会执行,根据satisfy 设置的不同,走不同的流程。
可能经过一个阶段就跳入到下一个流程模块去。

2.6 try_files

原理 : 依次试图访问多个URL对应的文件,当文件存在时直接返回文件内容。
按照顺序访问,
如果所有的文件都不存在,则按照最后一个URL结果或者code返回。

2.7 mirror

处理请求时,生产子请求访问其他服务,对子请求的返回值不做处理

可以做流量的备份。

2.8 root 和 alias

root : 会修改 替换 路由
alias:只使用 path 。 location 后的 URL 映射到文件路径

静态文件的返回格式

default_type : text/plain;

2.9 index

随机选择index指令指定的一系列index文件中的一个,作为 / 路径的返回文件内容

2.10 autoindex 模块

当 URL 以 / 结尾时,尝试以 html/xml/json/jsonp 等格式返回 root/alias 中指定目录的目录结构

2.11 content 阶段concat 模块

当页面需要访问多个小文件时,把它们的内容合并到一次HTTP响应中返回,提升性能

使用:在URL后加上 ??,后通过多个,分割文件。

格式:
https://g.alicdn.com/??kissy/k/6.2.4/seed-min.js,kg/global-util/1.0.7/index- min.js,tb/tracker/4.3.5/index.js,kg/tb-nav/2.5.3/index-min.js,secdev/sufei_data/3.3.5/index.js

2.12 log 阶段 log 模块

关于log 的简单用法,不再多说。具体迷惑的时候再自行搜索。

下面说一个比较有趣的使用方法:

clipboard.png

文件的缓存:

clipboard.png

10. 对应的命令参数总结脑图

clipboard.png

命令上有所重复,思路的总结方便还是 看第一部分 从指令上即可

100. 致敬

本文及系列文章中,都是靴子 陶晖 老师的系列课和对应的书籍

陶晖老师 :
【 Nginx核心知识100讲 】 : https://time.geekbang.org/cou...
【深入理解Nginx(第2版)】: https://book.douban.com/subje...


天真真不知路漫漫
70 声望6 粉丝

1