ngx_url_t
定义在 src/core/ngx_inet.h
typedef struct {ngx_str_t url;ngx_str_t host;ngx_str_t port_text;ngx_str_t uri;in_port_t port;in_port_t default_port;in_port_t last_port;int family;unsigned listen:1;unsigned uri_part:1;unsigned no_resolve:1;unsigned no_port:1;unsigned wildcard:1;socklen_t socklen;ngx_sockaddr_t sockaddr;ngx_addr_t *addrs;ngx_uint_t naddrs;char *err;
} ngx_url_t;
ngx_url_t
是 Nginx 中用于解析和存储 URL 或网络地址信息的核心结构体,主要用于配置解析、套接字地址管理 等
url
字段存储用户配置的原始 URL 字符串 ,作为解析其他字段(如
host
、port
、uri
)的原始数据源
socklen 字段
存储套接字地址结构的实际长度 ,用于系统调用(如
bind
、connect
)时传递正确的地址结构大小。协议兼容性
IPv4 地址结构(
sockaddr_in
)占 16 字节 。IPv6 地址结构(
sockaddr_in6
)占 28 字节 。
socklen
根据协议动态设置,确保系统调用的正确性
sockaddr 字段
存储解析后的二进制套接字地址结构 ,用于直接与操作系统交互(如
bind
、connect
等系统调用),支持 IPv4、IPv6 等多种协议。typedef union {struct sockaddr sockaddr;struct sockaddr_in sockaddr_in; #if (NGX_HAVE_INET6)struct sockaddr_in6 sockaddr_in6; #endif #if (NGX_HAVE_UNIX_DOMAIN)struct sockaddr_un sockaddr_un; #endif } ngx_sockaddr_t;
ngx_sockaddr_t 是一个联合体
struct sockaddr
是系统调用(如bind
、connect
)所需的通用地址结构 ,包含地址族(sa_family
)和数据字段。所有协议的地址结构(IPv4/IPv6/Unix域)均可强制转换为此类型
struct sockaddr_in sockaddr_in
定义 IPv4 专用地址结构
struct sockaddr_in {sa_family_t sin_family; // 地址族(AF_INET)in_port_t sin_port; // 端口号(网络字节序)struct in_addr sin_addr; // IPv4 地址char sin_zero[8]; // 填充字段(对齐用) };
struct sockaddr_in6 sockaddr_in6
定义 IPv6 专用地址结构
struct sockaddr_un sockaddr_un
定义 Unix 域套接字地址结构
err
字段用于存储 URL 解析过程中可能出现的错误信息。当 Nginx 在解析或处理一个 URL 时,如果发生了错误(例如格式不正确、主机名无法解析等),相关的错误描述信息会被存储到
err
字段中
last_port 端口范围的结束端口号