nginx会在几个连续的步骤中处理来自client客户端的TCP/UDP session,这些步骤也叫阶段。
1 Post-accept 阶段
这是接收客户端连接后的第一个阶段。在这个阶段 ngx_stream_realip_module插件会被调用。ngx_stream_realip_module插件是用来转换client端地址(address)和端口(port)为PROXY协议header中发送的某一个。
指令:
Syntax: set_real_ip_from address | CIDR | unix:;
Default: —
Context: stream, server
#
2 Pre-access阶段
针对访问的初步检查。在这个阶段 ngx_stream_limit_conn_module插件会被调用。ngx_stream_limit_conn_module插件用来限制定义的每个key的连接数量,实际上这个连接数量是来自单个IP地址的连接数量。
指令:
Syntax: limit_conn zone number;
Default: —
Context: stream, server
#
3 Access阶段
实际数据处理之前client客户端的限制。在这个阶段 ngx_stream_access_module插件会被调用。ngx_stream_access_module插件可以用来限制某些客户端地址的访问。
指令:
Syntax: allow address | CIDR | unix: | all;
Default: —
Context: stream, server
Syntax: deny address | CIDR | unix: | all;
Default: —
Context: stream, server
4 SSL阶段
TLS/SSL 处理。在这个阶段 ngx_stream_ssl_module插件会被调用。ngx_stream_ssl_module 提供对使用TLS/SSL协议的stream代理server的必要支持。
5 Preread 阶段
读取数据的初始字节到preread buffer中,在数据被处理之前,允许 ngx_stream_ssl_preread_module等插件分析数据。ngx_stream_ssl_preread_module插件允许在还没有终结SSL/TLS时从ClientHello message中提取信息。比如通过SNI请求的server名称。
指令:
Syntax: ssl_preread on | off;
Default:
ssl_preread off;
Context: stream, server
6 Content阶段
数据实际处理的委托阶段,通常被代理到upstream server,或者一个指定的值会被返回到客户端。
Log阶段
最后一个阶段,client session处理的结果会被记录。在这个阶段 ngx_stream_log_module 插件会被调用。ngx_stream_log_module 插件使用指定的格式来写session日志。
指令:
Syntax: access_log path format [buffer=size] [gzip[=level]] [flush=time] [if=condition];
access_log off;
Default:
access_log off;
Context: stream, server