定义在 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 端口范围的结束端口号