3.stream_proxy深度解析
2023-03-15 18:20:44 0 举报
AI智能生成
nginx stream proxy模块的配置解析
作者其他创作
大纲/内容
1.upstream_addr: 上游服务器的IP地址,格式为可读的字符串,例如127.0.0.1:8080 2.upstream_connect_time: 与上游服务器建立连接消耗的时间,单位为秒,精确到毫秒
upstream提供的变量, 可以打印日志
upstream提供的变量
子主题
ngx_stream_upstream.c
ngx_stream_upstream_round_robin.c
ngx_sream_upstream_module
ngx_stream_write_filter_module.c
ngx_stream_write_filter_module
ngx_stream_proxy_module.c
ngx_stream_proxy_module
三大模块函数列表(proxy模块必须包含三个模块)
基础配置
stream_module
关键代码段: if (font color=\"#569230\
(权重值)weight = 1;
允许server的最大连接数max_conns = 0;
允许的最大失败次数max_fails = 1;
失败的时间区间fail_timeout = 10;
是否为备用服务器backup=0;
是否下线该服务器down=0;
关键代码段: url = value[1]; --- 第一个参数就是URLif (font color=\"#569230\
服务器地址URLname
服务器对应的地址数组,可能有多个ip地址ngx_addr_t *addr
// 服务器地址数组的长度,即个数naddrs
服务器的恢复时间(在开源版本中暂未有使用)slow_start
指令配置项中解析: ngx_stream_upstream_commands[]{ ngx_string(\"server\"span style=\"font-size: inherit; font-weight: bold;\
1. 上游服务器的基本信息: (us)ngx_stream_upstream_server_t
typedef struct { ngx_stream_upstream_init_pt init_upstream; ngx_stream_upstream_init_peer_pt init; void *data;} ngx_stream_upstream_peer_t;struct ngx_stream_upstream_srv_conf_s { ngx_stream_upstream_peer_t peer; void **srv_conf; //服务器数组 ngx_array_t *servers; ---上游服务器结构(ngx_stream_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 */}
2. srv块配置信息ngx_stream_upstream_srv_conf_s
typedef struct { font color=\"#a66a30\
3. upstream数据转发结构ngx_stream_upstream_t
struct ngx_stream_upstream_rr_peers_s { ngx_uint_t number; ---可用的上游服务器数量 ngx_uint_t total_weight; ---上游服务器总权重,用于各权重相加算法计算 ngx_uint_t tries; ---重试次数 unsigned single:1; ---是否为只有一个上游服务器 unsigned weighted:1; ---是否开启权重算法 ngx_str_t *name; ---服务器名称 ngx_stream_upstream_rr_peers_t *next; ---下一个上游服务器 ngx_stream_upstream_rr_peer_t *peer; ---下一个上游服务器 };
typedef struct ngx_stream_upstream_rr_peer_s ngx_stream_upstream_rr_peer_t;struct ngx_stream_upstream_rr_peer_s { struct sockaddr *sockaddr; // 上游服务器的地址 socklen_t socklen; // 地址长度 ngx_str_t name; // 上游服务器的名称 ngx_int_t current_weight; // 当前权重: ngx_int_t effective_weight; // 有效权重:出错时,会降低权重值 ngx_int_t weight; // 权重:初始权重 ngx_uint_t conns; // 与该上游服务器建立的连接数 ngx_uint_t fails; // 连接失败的次数 ngx_uint_t max_fails; // 允许连接失败的最大次数 time_t fail_timeout; // 失败超时时间 time_t accessed; // 上次访问时间 ngx_uint_t down; // 是否下线 ngx_uint_t index; // 在轮询中的索引 ngx_stream_upstream_rr_peer_t *next; // 指向下一个上游服务器};
a. 轮询算法
4. upstream负载均衡
upstream_module
typedef struct { ngx_addr_t *addr; ngx_stream_complex_value_t *value; ---连接上游服务器的各种参数(超时、缓冲大小等) ngx_uint_t transparent; ---开启透明代理,需要配合iptables路由表使用} ngx_stream_upstream_local_t;typedef struct { ngx_msec_t connect_timeout; ---连接上游事件超时时间 ngx_msec_t timeout; ---读写事件超时 ngx_msec_t next_upstream_timeout; ---连接上游服务器超时时间 size_t buffer_size; ---上游读取数据缓冲区大小 ngx_stream_complex_value_t *upload_rate; ---上行速率 ngx_stream_complex_value_t *download_rate; ---下行速率 ngx_uint_t requests; ---上行的包统计数 ngx_uint_t responses; ---下行的包统计数 ngx_uint_t next_upstream_tries; ---上行断开重试次数 ngx_flag_t next_upstream; ---默认值为1(是否有upstream? ) ngx_flag_t proxy_protocol; ---是否开启了代理协议 ngx_flag_t half_close; ---半关闭: 只有双方都读取到EOF才关闭连接 ngx_stream_upstream_local_t *local; ---如上: 本端的一些配置 ngx_flag_t socket_keepalive; ---是否开启TCP keepAlive保活 ...................... ngx_stream_upstream_srv_conf_t *upstream; ---转发上游服务器集群upstream{}块 ngx_stream_complex_value_t *upstream_value; ---upstream支持的复杂变量} ngx_stream_proxy_srv_conf_t;
proxy_pass配置块
struct font color=\"#a66a30\
上游服务连接信息
proxy_module
typedef struct { ngx_chain_t *from_upstream; ---上行发送缓存 ngx_chain_t *from_downstream; ---下行发送缓存} ngx_stream_write_filter_ctx_t;
发送缓存
write_filter_module
数据结构
客户端connect
客户端send
客户端recv
服务端recv
服务端send
定时器timer
事件与数据处理
自定义事件
调试
stream_proxy深度解析
0 条评论
回复 删除
下一页