NGINX模块的功能

未完待续:


有几个阶段是特例,它不调用挂载地任何的handler,也就是你就不用挂载到这几个阶段了
NGX_HTTP_FIND_CONFIG_PHASE
NGX_HTTP_POST_ACCESS_PHASE
NGX_HTTP_POST_REWRITE_PHASE
NGX_HTTP_TRY_FILES_PHASE



只有下面这几个phase会有多个handler,剩余的都是只有一个handler的
NGX_HTTP_POST_READ_PHASE   
NGX_HTTP_SERVER_REWRITE_PHASE,  
NGX_HTTP_REWRITE_PHASE,  
NGX_HTTP_PREACCESS_PHASE,  
NGX_HTTP_ACCESS_PHASE,  
NGX_HTTP_CONTENT_PHASE,  
NGX_HTTP_LOG_PHASE


NGX_HTTP_POST_READ_PHASE

checker:
ngx_http_core_generic_phase
handler:
ngx_http_realip_handler



NGX_HTTP_SERVER_REWRITE_PHASE:
checker:
ngx_http_core_rewrite_phase    
handler:
ngx_http_rewrite_handler
sever区块中如果有包含rewrite规则,则会最先执行,而且只会执行一次, 然后再判断命中
哪个location的配置,再去执行该location中的rewrite, 当该location中的rewrite执行完
毕时,rewrite并不会停止,而是根据rewrite过的URL再次判断location并执行其中的配置. 
那么,这里就存在一个问题,如果rewrite写的不正确的话,是会在location区块间造成无限
循环的.所以nginx才会加一个最多重试10次的上限.

NGX_HTTP_FIND_CONFIG_PHASE:
ngx_http_core_find_config_phase

这是find config phase的checker,用于根据uri查找对应的location,nginx中location的处

理是相当复杂的,这里关注于phase handler的处理流程.find config phase只有一
个phase handler,并且它没有相应的handler回调函数,完成的只是根据uri匹配到location之
后,将location的loc_conf赋值给request,并且根据loc_conf对request进行一些处理.所有
的由静态字符串标识的location被称作static location,由正则表达式表示的location成
为regex location.所有的static location被组织成二叉树,以便于查找.在static location
匹配失败后,会进行regex location匹配.这个过程正好描述了nginx中location的匹配规则.

 find config的checker可能会被执行多次,当rewrite成功后,会修改uri参数,需要重新匹
 配location.这就是find_config_index存在的必要,它用于初始化post rewrite phase handler
 的next字段,当uri被修改后会重新跳至find config phase执行.



NGX_HTTP_REWRITE_PHASE:
checker:
ngx_http_core_rewrite_phase
handler:
ngx_http_rewrite_handler

sever区块中如果有包含rewrite规则,则会最先执行,而且只会执行一次, 然后再判断命中
哪个location的配置,再去执行该location中的rewrite, 当该location中的rewrite执行完
毕时,rewrite并不会停止,而是根据rewrite过的URL再次判断location并执行其中的配置. 
那么,这里就存在一个问题,如果rewrite写的不正确的话,是会在location区块间造成无限
循环的.所以nginx才会加一个最多重试10次的上限.




NGX_HTTP_POST_REWRITE_PHASE:
checker:
ngx_http_core_post_rewrite_phase
这是post rewrite phase的checker,用于对rewrite和server rewrite phase进行收尾工作.
request中有两个字段与重写相关:
uri_changed:uri是否被重写.
uri_changes:uri被重写的次数,初始值为11,所以只能重写10次.
server rewrite和rewrite的handler会修改这两个变量,实现重写.这个checker就是根据
uri_changed判断是否进入find config phase,然后再根据uri_changes做一些校验

NGX_HTTP_PREACCESS_PHASE:
checker:
ngx_http_core_generic_phase
handler:
ngx_http_degradation_handler
ngx_http_realip_handler
ngx_http_limit_req_handler
ngx_http_limit_conn_handler


NGX_HTTP_ACCESS_PHASE:
checker:
ngx_http_core_access_phase

handler:

ngx_http_access_handler

用于检查IP地址是否可以访问


ngx_http_auth_basic_handler

用于验证用户名和密码




NGX_HTTP_POST_ACCESS_PHASE:
checker:
ngx_http_core_post_access_phase

这个是post access phase的checker,用于对access phase做收尾处理. 在ngx_http_init_phase_handlers中只有当use_access为1时这个phase才会有handler, 也就是说只有在access phase注册了handler时这个phase才会添加到请求处理流程里.post access handler完成的工作很简单,就是根据access_code做些出继续处理下个phase还是终止请求


NGX_HTTP_TRY_FILES_PHASE:
checker:
ngx_http_core_try_files_phase

try_files 用于搜索指定目录下的N个文件,如果找不到fileN,则调用fallback中指定的位置来处理请求.

语法: try_files file1 [file2 ... filen] fallback
默认值: 无
作用域: location
这个指令的作用就是可接收多个路径作为参数,当前一个路径的资源无法找到,则自动查找下
一个路径,如当请求的静态资源不存在,就将请求fallback指定位置到后台服务器上进行动态处理.
简单的例子:
location / {
         try_files index.html index.htm @fallback;
       }
location @fallback {
         root /var/www/error;
         index index.html;
       }


NGX_HTTP_CONTENT_PHASE:
checker:
ngx_http_core_content_phase
handler:

ngx_http_random_index_handler

在uri指定的目录下随机找一个文件: 将目录下面的文件名都保存到一个数组中,然后从中随机选择一个文件名,将文件名拷贝到uri中


ngx_http_index_handler

根据index的配置,按顺序查找相应的index是否存在,查到就采用internal redirect


ngx_http_autoindex_handler
ngx_http_dav_handler
ngx_http_gzip_static_handler
ngx_http_static_handler


NGX_HTTP_LOG_PHASE:
checker:
ngx_http_core_generic_phase
handler:
ngx_http_log_handler
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值