nginx upstream模块详解(基础结构篇)

本文详细解析了nginx upstream模块的基础数据结构,包括state结构体、upstream main作用域配置、server结构、peer结构等,并介绍了相关配置选项,如连接超时时间、缓冲区大小等,帮助读者深入理解nginx作为代理服务器的功能实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nginx upstream模块对于nginx 最为代理服务器提供了基础功能 结合upstream功能 nginx能对代理进行各种处理


nginx upstream基础数据结构

typedef struct {

    ngx_uint_t                       status;  //http状态码

    ngx_msec_t                     response_time; //上游服务器响应时间

    ngx_msec_t                     connect_time;  //成功连接上游服务器时间

    ngx_msec_t                     header_time; //头部时间耗费 处理完成上游服务器返回头部的时间和响应时间差

    off_t                                response_length;   //http包体和头部总长度

    off_t                                bytes_received; //upstream接收到的字节数

    ngx_str_t                       *peer; //上游服务器地址(ip或名称)

}  ngx_http_upstream_state_t;

state结构体中的成员可以绑定到nginx http变量中 从而可以在nginx access中打印出请求的对应上述变量信息

upstream main作用域可配置信息

typedef struct {

    ngx_hash_t                       headers_in_hash;  //其他模块配置的hash头部信息
    ngx_array_t                      upstreams; //可配置多个upstream

} ngx_http_upstream_main_conf_t;


upstream server结构

typedef struct {

    ngx_str_t                         name;      //server名称
    ngx_addr_t                      *addrs;   //server地址
    ngx_uint_t                       naddrs;   //地址数量
    ngx_uint_t                       weight;   //server对应的权重
    ngx_uint_t                       max_conns;  //指定server最大连接数
    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;

upstream peer结构

typedef struct {
    ngx_http_upstream_init_pt            init_upstream;  //peer配置初始化
    ngx_http_upstream_init_peer_pt   init; //peer初始化
    void                            *data;         //传入的数据地址

} ngx_http_upstream_peer_t;


nginx server作用域配置结构

struct ngx_http_upstream_srv_conf_s {
    ngx_http_upstream_peer_t         peer;     //upstream peer
    void                                         **srv_conf;

    ngx_array_t                               *servers;  

    ngx_uint_t                       flags;  //可支持的标志
    ngx_str_t                        host;    //server主机地址
    u_char                          *file_name;  //conf配置文件名
    ngx_uint_t                       line;   //所在配置文件里行数
    in_port_t                         port;   //端口号
    ngx_uint_t                        no_port; //没有端口号
#if (NGX_HTTP_UPSTREAM_ZONE)

    ngx_shm_zone_t                  *shm_zone; // upstream共享内存

#endif

};


upstream local  上游服务器解析绑定到本机地址

typedef struct {
    ngx_addr_t                                 *addr;
    ngx_http_complex_value_t        *value;
#if (NGX_HAVE_TRANSPARENT_PROXY)
    ngx_uint_t                       transparent; /* unsigned  transparent:1; */
#endif

} ngx_http_upstream_local_t


### Nginx Upstream HTTPS 配置 为了使 Nginx 支持通过 `upstream` 进行 HTTPS 反向代理,需确保 Nginx编译并启用了 SSL 模块[^4]。确认命令如下: ```bash /usr/local/webserver/nginx/sbin/nginx -V 2>&1 | grep -- '--with-http_ssl_module' -q && echo "SSL Module Enabled" || echo "SSL Module Disabled" ``` 当配置文件中包含 `--with-http_ssl_module` 参数时,则表示已经启用。 对于上游服务器的定义,在使用 HTTPS 协议的情况下,除了常规设置外还需要特别注意几个方面来保障连接的安全性和稳定性。下面是一个完整的例子展示如何配置有 HTTPS 的 upstream 和 server 块: #### 配置样例 ```nginx http { upstream secure_backend { # 后端服务列表可以是 IP 地址加端口的形式也可以是指定域名形式 server backend1.example.com:443; server backend2.example.com:443; # 设置健康检查机制 (可选) check interval=3000 rise=2 fall=5 timeout=1000 type=http; # 对于 HTTPS 上游来说非常重要的一点就是指定协议为 ssl 并提供必要的参数 ssl on; ssl_protocols TLSv1.2 TLSv1.3; # 推荐只允许较新的TLS版本 ssl_ciphers HIGH:!aNULL:!MD5; # 加密套件的选择应遵循安全性原则 # 如果后端服务器提供了自签名或其他不受信任机构签发的证书, # 或者出于某些原因需要绕过验证(不推荐),可以通过此选项关闭客户端到后端之间的 SSL/TLS 握手中的 CA 认证流程。 # 注意这样做会降低整体系统的安全性,请谨慎考虑。 # ssl_verify none; } server { listen 80; server_name localhost; location /secure/ { proxy_pass https://secure_backend/; # 转发请求头信息给后端应用 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; # 解决 POST 请求被重定向成 GET 的问题 proxy_redirect off; # 设定缓冲区大小以及超时时间等其他优化项... client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k; } } } ``` 上述配置实现了对多个后端 HTTPS 服务的支持,并且包含了基本的安全措施如限定使用的 TLS 版本和加密算法集。如果要让这些更改生效,保存修改后的配置文件之后记得重启 Nginx 服务以加载新设定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值