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头部
输出过滤器
内部跳转
原文地址:https://www.cnblogs.com/erdanyang/p/10771753.html