配置冲突
典型结构:

http -> server -> location
指令的上下文

指令合并

值指令, 向上覆盖:

接收请求事件模块

- 请求内存池
- 连接内存池
- ngx_http_wait… 从 connection_pool_size(连接内存池) 中获得内存
可以这么理解连接/请求内存池, 它们都是某种结构体, 其中存储了各种状态数据.
接收请求 HTTP 模块


- 测试正则表达式的工具 pcretest
server_name 指令

- return 指令
- server_name_in_redirect

Server 匹配顺序

HTTP 请求的11个处理阶段

post_read 获取一些原始值
- 读取 header 之后, 加工之前
server_rewrite 只有 nginx 框架在处理
- 只有 rewrite 模块
find config 只有 nginx 框架在处理
- location 匹配
rewrite 只有 nginx 框架在处理
- 只有 rewrite 模块
post_rewrite 刚刚 rewrite 之后做一些事情
- 官方也没有在此阶段处理的模块
preaccess 确认访问权限有三个
access
post access
precontent 将请求发向第三方
content
log

处理顺序

- 某个模块执行完, 可以跳过若干个模块, 再向后传递 req
postread
拿到用户真实 IP

- x-forwarded-for 可以添加多个 ip
- x-real-ip 只能添加一个
使用真实用户 ip
- realip 模块会从 x-forwarded-for x-real-ip 中获得的值覆盖 binary_remote_addr remote_addr 变量
realip 模块


- set_real_ip_from
定义受信的机器 ip, 从这些机器发来的 x-forwarded-for 中获取客户端真实地址
- real_ip_header
从哪取客户端真实 ip
- real_ip_recursive
排除 x-forwarded-fro 中与客户端相同的 ip
rewrite 模块
该模块生效后, 其它后面的阶段无法执行.
return:

- 301 浏览器会缓存
- 444 浏览器收不到该错误码
error_page:

rewrite:

rewrite_log 指令
if


find_config
location 指令:


preaccess
- limit_req 限制每秒请求数
- limit_conn 限制每秒连接数
leaky buctek 算法

access
allow 模块
allow 指令

auth_basic 模块
auth_request 模块
satisfy 指令
precontent
try_files 模块

mirror 模块

content
static 模块?
- root
- alias

提供的变量

静态文件返回的 content-type

响应中, 设置重定向 Location heaer

index 模块
autoindex 模块
concat 模块

log
log 模块

过滤模块
加工响应内容

变量

- 惰性求值
- 变量值可以时刻变化, 其值为使用的那一时刻的值
存放变量的哈希表

变量分类

常用变量





tcp 相关变量


处理请求所产生的变量


发送 http 响应所产生的变量

nginx 系统变量

referer 模块
- 防盗链
secure_link 模块
- 哈希
map 模块
split_client 模块
- 实现ab测试

geo 模块
- 根据 ip 地址生成变量

geoip
- 计算 ip 所属地域信息
- MaxMind 数据库

keepalive

