NGINX openrestry(指令的执行顺序)

Posted erdanyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NGINX openrestry(指令的执行顺序)相关的知识,希望对你有一定的参考价值。

nginx的指令的执行顺序:

一、post-read

二、server-rewrite

  ngx_rewrite模块的set指令和rewrite指令(前提在server里面配置时)

三、find-config

四、rewrite

  ngx_rewrite模块的set指令和rewrite指令(前提在location里面配置时)

  ngx_set_misc模块的set_unescape_uri指令

  ngx_lua模块的set_by_lua指令

  rewrite tail:

  ngx_headers_more模块的more_set_input_headers指令

  ngx_lua模块的rewrite_by_lua指令

五、post-rewrite

六、preaccess

七、access

  ngx_access模块的allow指令和deny指令(多个指令会按顺序进行执行)

  如果首先匹配的指令是 allow,则会继续执行后续其他模块的指令或者跳到后续的处理阶段;而如果首先满足的是 deny 则会立即中止当前整个请求的处理,并立即返回 403 错误页。

  access tail:

  ngx_lua模块的access_by_lua指令

  tips:指令中return表示该指令就是,继续执行后续的指令。

  tips:ngx_lua模块的ngx.exit(403)函数,直接结束整个请求处理过程,返回403页面。

八、post-access

九、try-files

十、content阶段:

  这个阶段的这么多的指令只能有一种胜出。每一个location只能有一个内容处理程序。

  执行的顺序是:如果1里面有就从里面选择一个执行,如果1里面没有就让2执行,如果2没有或者处理不了就让3执行,如果3没有或者处理不了就让4执行。

1、ngx_echo模块的echo指令、echo_exec指令、echo_location指令

  ngx_proxy模块的proxy_pass指令

  ngx_lua模块的content_by_lua指令

  用一种指令有的可以写几次,比如echo。

location /test {
  echo hello;
  echo world;
}

  ngx_lua模块的ngx.say函数和ngx_echo模块的echo函数是一样的

location /test {
  content_by_lua ngx.say("hello") ngx.say("world");
}

2、ngx_index模块的index指令:

  处理以‘/‘结尾的请求

location / {
  root /var/www/;
  index index.htm index.html;
}

  当用户请求‘/‘地址时,Nginx会自动在/var/www/index.htm目录下寻找这个文件,如果找到,则直接发起内部跳转到新的‘/index.html‘这个新的地址,如果不存在,则继续找/var/www/index.html这个文件,如果找得到,则直接发起内部跳转到‘/index.html‘这个地址,如果不存在,就交给后续的模块进行处理,如果都处理不了,就报403的错误。

内部跳转:

  ngx_index模块的index指令

  echo模块的echo_exec指令

  ngx_rewrite模块的rewrite指令

3、ngx_autoindex模块的autoindex指令:

  处理以‘/‘结尾的请求

  自动生成目录索引页

location / {
root /var/www/;
index index.html;
autoindex on;
}

  当请求到来时,当/var/www/index.html的页面不存在时,会显示/var/www/下的文件目录列表;当index.html的存在时,会优先执行ngx_index模块的index指令,直接发生内部跳转。

4、ngx_static模块的静态资源指令:

  处理不以‘/‘结尾的网页

  专门用来处理和输出静态资源内容的

location / {
}

  因为没有配置 root 指令,所以在访问这个接口时,Nginx 会自动计算出一个缺省的“文档根目录”。该缺省值是取所谓的“配置前缀 prefix路径下的 html/ 子目录。举一个例子,假设配置前缀是 /foo/bar/,则缺省的“文档根目录”便是 /foo/bar/html/。

  当静态资源找不到时会出现404错误。404是指静态资源找不到,而并非location找不到。

十一、log

http头部

输出过滤器

内部跳转

以上是关于NGINX openrestry(指令的执行顺序)的主要内容,如果未能解决你的问题,请参考以下文章

API网关——Kong实践分享

nginx rewrite 指令

30分钟通过Kong实现.NET网关

如何控制 NGINX 'Location' 指令匹配顺序?

nginx rewrite

继续了解nginx与rewrite跳转!