nginx访问第三方服务之upstream使用

当需要访问第三方服务时,Nginx提供了两种全异步方式来与第三方服务器通信:upstream与subrequest。本文将介绍upstream的使用方式,Nginx的HTTP反向代理模块就是基于upstream方式实现,当我们希望把第三方服务的内容几乎原封不懂地返回给用户时,一般使用upstream方式,它可以非常高效地透传HTTP。

1.upstream的使用方式

upstream的使用方式并不复杂,它提供了8个回调方法,见文件http/ngx_http_upstream_t.h,用户需要实现的其中的几个回调方法,本例中实现了3个回调方法:

struct ngx_http_upstream_s{
//...
//构造发往上游服务器的请求
    ngx_int_t                      (*create_request)(ngx_http_request_t *r);
//收到上游服务器的TCP流时回调,直到不返回NGX_AGAIN,处理http响应
    ngx_int_t                      (*process_header)(ngx_http_request_t *r);
//销毁upstream时回调
    void                           (*finalize_request)(ngx_http_request_t *r,ngx_int_t rc);
//...
};

那么upstream是如何嵌入到一个请求中的?
模块在处理任何一个请求时都有ngx_http_request_t结构对象r,该结构中有一个ngx_http_upstream_t类型的成员upstream,见文件http/ngx_http_request.h

struct ngx_http_request_s
{
    //...
    ngx_http_upstream_t    *upstream;
    //...
}

如果没有使用upstream机制,则需要将相应的成员设置为NULL指针,否则需要对r->upstream进行设置。
HTTP模块启用upstream机制的步骤如下:

Created with Raphaël 2.1.0 Start 调用ngx_http_upstream_create方法为请求创建upstream 设置第三方服务器地址 设置upstream的回调方法 调用ngx_http_upstream_init方法启动upstream End

使用upstream模块提供的ngx_http_upstream_init方法后,HTTP如何运行upstream框架,大致流程如下:

Created with Raphaël 2.1.0
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值