zoukankan      html  css  js  c++  java
  • nginx 关于 content 阶段的一个疑惑

    nginx 关于 content 阶段的一个疑惑

    location /renwu/ {
      # 1
      rewrite /renwu(.*) /api/index.html break;
      # 2
      proxy_pass http://renwu.airtlab.com;
    }
    

    之前对这一块不了解,自己看不懂上面的配置,以为这里的 proxy_pass 是无效的,当访问 /renwu/ 时永远都是访问
    /api/index.html 这个资源。

    今天接手了同事的项目,发现这样配置是有效的,于是查了相关文档搞清楚了,这里涉及到两个知识点。

    (1)rewrite 比 proxy_pass 先执行,而且重定向后的 path 会替代 proxy_pass 的 URI

    (2)proxy_pass 有效的原因是,proxy_pass 在 conetnt 阶段执行。

    CONTENT 阶段有些特殊,它不像其他阶段只能执行固定的 handler 链,还有一个特殊的 content_handler,每个 location 可以有自己独立的 content handler,而且当有 content handler 时,CONTENT 阶段只会执行 content handler,不再执行本阶段的 handler 链。

    默认情况下,Nginx 会在 CONTENT 阶段的 handler链挂上index模块,静态文件处理模块等的 handler。另外模块还可以设置独立的 content handler,比如ngx_http_proxy_module的proxy_pass指令会设置一个名为ngx_http_proxy_handler的content handler。

    这里解释了为什么这里的 proxy_pass 有效的原因,参考文章见:http://tengine.taobao.org/book/chapter_12.html#content

  • 相关阅读:
    div居中方法总结
    windows下配置nginx环境
    webpack+babel+react操作小结
    JavaScript数组常用操作总结
    MyBatis使用Generator自动生成代码
    如何上Chrome谷歌商店
    深入理解Spring IOC
    SpringMVC概要总结
    mybatis防止sql注入
    Redis和Memcache的区别分析
  • 原文地址:https://www.cnblogs.com/GManba/p/14100348.html
Copyright © 2011-2022 走看看