Nginx在处理请求时,按照不同的阶段依次处理,常见的阶段如rewrite、access和content依次执行。Nginx中的指令一般只注册在某一个阶段,如echo注册在content阶段,set注册在rewrite阶段,因此set总是在echo之前执行,与书写顺序无关。特殊的,geo和map指令与处理阶段无关,它们是声明性的。
1,rewrite阶段
rewrite中的指令可以混合执行,如set、set_by_lua等,set_by_lua将计算结果赋予变量,如set_by_lua $c "return ngx.var.a + ngx.var.b"。ngx.var.VARIABLE 接口来读取 Nginx 变量 $VARIABLE,将a和b的和赋给c,特殊的当由于nginx中变量只能是字符串,而在lua中若a和b是数字的则会转换为数值类型再求和,转换为字符串赋给c。这些第三方模块注入到rewrite的指令序列中,而其他模块岁也在rewrite阶段,但和ngx_rewrite的指令分开执行,即使运行在同一个请求处理阶段,分属不同模块的配置指令也可能会分开独立运行。rewrite_by_lua指令也运行在rewrite阶段的末尾。
2,access阶段
执行在rewrite之后的access阶段的任务主要是执行访问控制的任务,如检查用户权限及IP合法性等。ngx_access的指令按顺序执行,直到遇到第一条满足的条件指令为止就不执行allow和deny。allow若先匹配则执行后续其他模块的指令,若deny先匹配则返回403。
ngx_lua模块的accessby_lua执行在access阶段,与rewrite_by_lua类似执行在access的末尾。可通过嵌入的lua代码执行较复杂的验证过程。执行效率较ngx_lua慢。
3,content阶段
执行在access之后的content阶段任务是生成响应内容并输出HTTP响应。如echo指令,echo_ecxec,proxy_pass,echo_location及content_by_lua都运行在此阶段。注意,与rewrite和access阶段不同,content阶段不同模块的配置指令不能一起混合使用。向 content 阶段注册配置指令本质上是在当前的 location 配置块中注册所谓的“内容处理程序”。而每一个 location 只能有一个“内容处理程序”,因此,当在 location 中同时使用多个模块的 content 阶段指令时,只有其中一个模块能成功注册“内容处理程序”。所以应当避免在同一个 location 中使用多个模块的 content 阶段指令。
content阶段包含三个静态资源服务模块,ngx_index,ngx_autoindex,ngx_static用于当在location未使用任何content阶段的指令时处理URL请求。ngx_index和ngx_autoindex只作用于已/结尾的URI,其他由ngx_static执行。
ngx_index使用index指令用于查找首页文件,配合root指令实现,当找到文件后触发内部跳转而不是直接返回该文件,若都不存在则返回403。ngx_autoindex用于开启目录索引autoindex on,当index指定的首页文件不存在时返回该目录索引。
ngx_static处理所有的静态资源的请求, /VAR/WWW/目录下有index.html文件,如:
相关推荐
主要介绍了详解nginx请求头数据读取流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
ngx_req_status用来展示nginx请求状态信息,类似于apache的status,nginx自带的模块只能显示连接数等等信息,我们并不能知道到底有哪些请求、以及各url域名所消耗的带宽是多少。ngx_req_status提供了这些功能. 功能...
Nginx中http请求处理过程 有不少地方不是很明白 ,还望大家共同交流
linux 32位系统下nginx可以执行程序,支持rtmp推流,拉流
网上查了一下nginx日志记录post请求的内容的方法,主要都是通过LUA实现的,我不知道什么是LUA,因此仅用proxy_pass指令实现保存post请求的内容
nginx http每个阶段的处理、比较详细、其实我是想放到博客里、但是不支持文件上传~~~
nginx常用bat批处理命令,放在nginx同级目录下使用,可快速的重启、停止、关闭nginx。 quit.bat(退出Nginx) reload.bat(重启Nginx) stop.bat(停止Nginx)
1 目标:将WebService和客户端部署在不同的服务器,由客户端请求服务。 2 原理:Nginx将不同域的HTTP服务、网站放入统一的域中,规避跨域问题。 不同的服务器位置于不同的域。JavaScript安全性不允许POST的跨域...
nginx配置文件优化参数
nginx上传文件大小报错500的解决办法 采用nginx作反向代理,出现了一个诡异的问题,小文件可以提交,大文件会报500内部错误。这个是什么原因导致的呢? 查wiki可知,上传文件大小相关的有三个配置 client_body_...
当在一台主机上部署了多个不同的web服务器,并且需要能在80端口同时访问这些web服务器时,可以使用 nginx 的反向代理功能: 用 nginx 在80端口监听所有请求,并依据转发规则(比较常见的是以 URI 来转发)转发到对应的...
nginx做正向代理,假设监听80端口,而一个用户请求的url带非80端口号,nginx会默认将该url请求转到80端口,百度了一番,网友提供的方法都无法解决问题,于是自己用lua解决了: 1、最多的解决方式就是在$host后面添加...
使用Nginx+Tomcat搭建负载均衡,实现网站请求的分发
nginx+lua开发的学习笔记~~~、希望有所帮助、共同成长~
nginx实现请求的负载均衡 + keepalived实现nginx的高可用的shell脚本,在liunx下跑就可以
NULL 博文链接:https://eyesmore.iteye.com/blog/1142162
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,...
服务器中的错误记录类似于这种: 124.65.133.242 – – [27/Oct/2014:14:30:51 +0800] “-” 400 0 “-” “-” 124.65.133.242 – – [27/Oct/2014:14:31:45 +0800] “-” 400 0 “-” ...经过分析nginx的log文件,发
主要介绍了基于javascript处理nginx请求过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下