![image-20190219145636828](/Users/xhxu/Library/Application Support/typora-user-images/image-20190219145636828.png)
![image-20190219145704712](/Users/xhxu/Library/Application Support/typora-user-images/image-20190219145704712.png)
connection_pool_size 512 字节是 nginx 框架和客户端建立了连接时就产生的。
当客户端有数据请求发来时,这时候是在 request_pool_size 4k 的空间里,开始分配出具体的 client_header_buffer_size 1k
然后,如果客户端的请求头部太长、超过了 4k ,这时候 large_client_header_buffers 4 8k 就会起作用
如果请求的URI不超过1k,client_header_buffer_size够用的话,后面的8k的large_client_header_buffers就不用分配了
而4k的请求内存池是一定会分配的
large_client_header_buffers是从请求内存池分配的
client_header_buffer_size定义的这段内存,是从连接的内存池中分配出的(即connection_pool_size),如果连接被复用的话,虽然请求内存池会被释放,但连接内存池照旧使用。所以,我们需要先分清连接与请求,并清楚他们的内存池。
pool_size只是内存池的初始分配大小,当然实际使用中可以超出此大小。而client_header_buffer_size则具体指明某一用途下的内存大小,这里就是最开始接收HTTP请求的内存大小。
阶段间是固定的,同一阶段内的各模块是倒序的
但不一定某个阶段的模块执行顺序是一定的
所有请求都是依据http 11个阶段顺序执行
序号 | 阶段 | 模块 | 备注 |
---|---|---|---|
1 | POST_READ | realip | 获取客户端真实IP |
2 | SERVER_REWRITE | rewrite | |
3 | FIND_CONFIG | nginx 框架会做,location匹配 | |
4 | REWRITE | rewrite | |
5 | POST_REWRITE | ||
6 | PRE_ACCESS | limit_conn, limit_req | 并发连接数,每秒请求数 |
7 | ACCESS | auth_basic, access, auth_request | auth_basic可以做访问限制 |
8 | POST_ACCESS | ||
9 | PRE_CONTENT | try_files | |
10 | CONTENT | index, autoindex, concat | |
11 | LOG | access_log | access_log记录请求日志 |
需要基于变量来使用
如binary_remote_addr, remote_addr这样的变量,其值为真实IP,这样做连接限制(limit_conn模块)才有意义
默认不会编译进nginx, 需下载源代码添加以下编译参数
--with-http_realip_module
Address | CIDR | unix
Context: http, server, location
field | X-Real-IP | X-Forwarded-For | proxy_protocol
context: http, server, location
on | off
Default: off
context: http, server, location
vim realip.conf server { server_name realip.xurick.com; error_log logs/myerror.log debug; set_real_ip_from 119.119.119.119 #real_ip_header X-Real-IP; real_ip_recursive off; #这里关闭了 #real_ip_recursive on; real_ip_header X-Forwarded-For; location / { return 200 "Client real ip: $remote_addr\n"; } } # 若访问 curl -H 'X-Forwarded-For: 1.1.1.1,119.119.119.119' realip.xurick.com Client real ip: 119.119.119.119
vim realip.conf server { server_name realip.xurick.com; error_log logs/myerror.log debug; set_real_ip_from 119.119.119.119 #real_ip_header X-Real-IP; #real_ip_recursive off; real_ip_recursive on; #这里打开了 real_ip_header X-Forwarded-For; location / { return 200 "Client real ip: $remote_addr\n"; } } # 若访问 curl -H 'X-Forwarded-For: 1.1.1.1,119.119.119.119' realip.xurick.com Client real ip: 1.1.1.1