子请求

这个概念应该是nginx特有的。它的能力就像nginx一样,被严重高估。即便是在nginx最为擅长的静态文件服务方面,nginx也不是最棒的。

为了使用子请求,很简单,通过命令hi_subrequest

  1. location ^~ /sub {
  2. hi_subrequest '/query';
  3. hi_lua_content 'hi_res:header("Content-Type",hi_req:get_form("__subrequest_content_type__"))\nhi_res:status(tonumber(hi_req:get_form("__subrequest_status__")))\nhi_res:content(hi_req:get_form("__subrequest_body__"))';
  4. }
  5. location ^~ /query {
  6. internal;
  7. proxy_pass http://http://hq.sinajs.cn/;
  8. proxy_set_header Accept-Encoding '';
  9. }
  10. # curl -i http://localhost/sub?list=sh601006

正常访问/sub,hi-nginx会依据hi_subrquest的指示,先访问/query获得数据,然后把三个数据存储在请求的form属性中:

  • subrequest_content_type
  • subrequest_status
  • subrequest_body
    开发者直接从中取值,然后随意行事即可。

注意:所有向/sub提交的参数都会悉数提交给子请求/query,hi_subrequest支持任意HTTP METHOD。

原文: https://doc.hi-nginx.com/00/0008.html