Nginx采用事件驱动的异步非阻塞架构,主要由以下几部分组成:
ngx_connection_t
结构ngx_pool_t
用于该连接生命周期内的内存管理ngx_http_request_t
请求结构体Nginx将请求处理分为11个阶段(phase),按顺序执行:
当Nginx作为反向代理时:
上游服务器选择:
请求转发:
ngx_http_upstream_init(r); // 初始化upstream
ngx_http_upstream_connect(r, u); // 连接上游服务器
ngx_http_upstream_send_request(r, u); // 发送请求
响应处理:
Nginx支持多种负载均衡算法:
struct ngx_http_request_s {
ngx_uint_t method; // HTTP方法
ngx_uint_t http_version; // HTTP版本
ngx_chain_t *header_in; // 请求头缓冲区
ngx_http_headers_in_t headers_in; // 解析后的请求头
ngx_http_connection_t *connection; // 连接对象
ngx_http_variable_value_t *variables; // 变量数组
ngx_http_location_tree_node_t *loc_conf; // location配置
};
struct ngx_http_upstream_s {
ngx_peer_connection_t peer; // 上游服务器连接
ngx_http_upstream_conf_t *conf; // upstream配置
ngx_http_upstream_headers_in_t headers_in; // 上游响应头
ngx_output_chain_ctx_t output; // 输出过滤器上下文
};
client_body_buffer_size
等502 Bad Gateway:
请求被截断:
性能瓶颈:
通过深入理解Nginx的请求处理流程和转发机制,可以更好地进行配置优化和故障排查,充分发挥Nginx的高性能特性。