先梳理他的基本流程,就可以知道什么阶段可以做好什么事
本文可能不易于不便于阅读,因为这个更多的是我思路的总结。是一个脉络的概述。
至于阶段理解的各个模块的具体参数,可以再自行搜索。
如有不便之处,敬请谅解。
1. 处理流程是什么?
1.1 处理流程
Nginx 处理的核心框架设计
看清里面的流程箭头方向。
对应的11个阶段的模块
按照不同模块的顺序,下面的模块可以自动使用上面模块的变量和结果。
1.2 对应的顺序
每一个阶段,不同的模块也是有顺序的
1 : 使用了 auto_index 没有显示目录结构,仍然显示具体的html 文件内容
是因为 index 有更高的优先级
- 变量的使用
是 : 先解析所有的变量配置,加载到内存 。再统一使用
如果介绍一个HTTP模块,需要先分清楚 它属于哪一个模块,它是哪一个阶段生效的
1.10 对应的脑图
2. 各模块的功能
2.1 realip
为什么有realip模块。
real_ip 只有一个
X-Forwarded-For 经过的每一个代理服务器
2.2 Rewrite 模块
2.2.1 直接返回的指令 : (不向下执行)
- return
- 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 报文的流动来思考
2.3 limit_conn
在进行请求分析之前,为客户端的连接数做一定的访问限制。
为每个connection ,每个客户端的connection 数量
2.4 limit_req
每个connection 的request num /sec
leaky bucket
2.5 access 模块
前面的更多的是 限制连接数,限制请求数,限制速度。
如果想根据 参数不同的,限制来源,增加权限
2.5.1 allow 和 deny
可以通过 allow 和 deny 做简单的ip 来源限制
2.5.2 auth_basic 基本的验证
通过一个密码文件,验证用户的登录名和密码
2.5.3 auth_request
交给上游服务器,可以由一定的业务来判断
原理: 收到请求后,通过反向代理技术把请求传递给上游服务
2.5.4 staisfy 指令
所有并不是 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 的简单用法,不再多说。具体迷惑的时候再自行搜索。
下面说一个比较有趣的使用方法:
文件的缓存:
10. 对应的命令参数总结脑图
命令上有所重复,思路的总结方便还是 看第一部分 从指令上即可
100. 致敬
本文及系列文章中,都是靴子 陶晖 老师的系列课和对应的书籍
陶晖老师 :
【 Nginx核心知识100讲 】 : https://time.geekbang.org/cou...
【深入理解Nginx(第2版)】: https://book.douban.com/subje...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。