nginx源码分析----解析upstream配置

本文深入探讨Nginx如何存储和解析upstream配置,通过ngx_http_upstream_main_conf_t、ngx_http_upstream_srv_conf_t和ngx_http_upstream_server_t三个结构体管理配置。解析过程中,nginx遍历模块,调用ngx_http_upstream_module的handler方法,创建并添加ngx_http_upstream_srv_conf_t到配置数组,同时更新配置上下文信息。此外,文章还介绍了ngx_http_upstream_add函数的实现细节,包括检查重复upstream和创建新结构体。
摘要由CSDN通过智能技术生成

nignx解析配置文件时,当遇到一下配置时,会做哪些事情?

upstream test.balancer.com {
			1.1.1.1:80;
			2.2.2.2:80;
}

一、 存储upstream配置的三大结构体

首先需要解决upstream配置的存储问题,nginx是通过ngx_http_upstream_main_conf_t,ngx_http_upstream_srv_conf_t,ngx_http_upstream_server_t 三个结构体来存储upstream配置的。
其中ngx_http_upstream_main_conf_t的定义如下:

typedef struct {
    ngx_hash_t                       headers_in_hash;
    ngx_array_t                      upstreams;            //每一个upstream都存储upstreams数组里。
                                             /* ngx_http_upstream_srv_conf_t */
} ngx_http_upstream_main_conf_t;

其中的upstream成员是一个数组,数组中的每个元素又是ngx_http_upstream_srv_conf_t类型的。
ngx_http_upstream_srv_conf_t定义如下:

struct ngx_http_upstream_srv_conf_s {
    ngx_http_upstream_peer_t         peer;
    void                           **srv_conf;

    ngx_array_t                     *servers;  /* ngx_http_upstream_server_t */

    ngx_uint_t                       flags;
    ngx_str_t                        host;
    u_char                          *file_name;
    ngx_uint_t                       line;
    in_port_t                        port;
    ngx_uint_t                       no_port;  /* unsigned no_port:1 */

#if (NGX_HTTP_UPSTREAM_ZONE)
    ngx_shm_zone_t                  *shm_zone;
#endif
};

其中的servers字段又保存了该upstream配置中每个server的详细信息,包括ip、weight,max_conns,down等信息。

typedef struct {
    ngx_str_t                        name;
    ngx_addr_t                      *addrs;
    ngx_uint_t                       naddrs;
    ngx_uint_t                       weight;
    ngx_uint_t                       max_conns;
    ngx_uint_t                       max_fails;
    time_t                           fail_timeout;
    ngx_msec_t                       slow_start;
    ngx_uint_t                       down;

    unsigned                         backup:1;

    NGX_COMPAT_BEGIN(6)
    NGX_COMPAT_END
} ngx_http_upstream_server_t;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值