Nginx 如何处理 TCP/UDP 会话
来自客户端的 TCP/UDP 会话会按顺序经过称为阶段的步骤进行处理
-
Post-accept(接受后)
- 接受客户端连接后的第一个阶段。在此阶段会调用 ngx_stream_realip_module 模块。
-
Pre-access(访问前)
- 初步的访问检查。在此阶段会调用 ngx_stream_limit_conn_module 和 ngx_stream_set_module 模块。
-
Access(访问)
- 在实际数据处理之前限制客户端访问。在此阶段,会调用 ngx_stream_access_module 模块,对于 njs,会调用 js_access 指令。
-
SSL
- TLS/SSL 终止。在此阶段会调用 ngx_stream_ssl_module 模块。
-
Preread(预读)
- 将初始数据字节读取到 预读缓冲区 中,以允许诸如 ngx_stream_ssl_preread_module 之类的模块在处理数据之前对其进行分析。对于 njs,在此阶段会调用 js_preread 指令。
-
Content(内容)
- 强制阶段,在此阶段实际处理数据,通常将数据 代理 到 上游 服务器,或者将指定的值 返回 给客户端。对于 njs,在此阶段会调用 js_filter 指令。
-
Log(日志)
- 最终阶段,在此阶段记录客户端会话处理的结果。在此阶段会调用 ngx_stream_log_module 模块。