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 字符串 ,作为解析其他字段(如 hostporturi)的原始数据源 

socklen 字段

存储套接字地址结构的实际长度 ,用于系统调用(如 bindconnect)时传递正确的地址结构大小。 

协议兼容性

  • IPv4 地址结构(sockaddr_in)占 16 字节

  • IPv6 地址结构(sockaddr_in6)占 28 字节

  • socklen 根据协议动态设置,确保系统调用的正确性

 sockaddr 字段

存储解析后的二进制套接字地址结构 ,用于直接与操作系统交互(如 bindconnect 等系统调用),支持 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 是系统调用(如 bindconnect)所需的通用地址结构 ,包含地址族(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 端口范围的结束端口号

 

你可能感兴趣的:(linux,运维,服务器)