Loading... <div class="tip share">请注意,本文编写于 1691 天前,最后修改于 1691 天前,其中某些信息可能已经过时。</div> ![img](https://st.90.vc/upic/1468231-20190708130436708-2015007309.png) ## nginx的处理用户请求的11 个阶段 nginx将一个HTTP请求分为11个处理阶段,这样做让每个HTTP模块可以仅仅专注于完成一个独立,简单的功能。而一个请求的完整处理过程可以由多个HTTP模块共同合作完成。可以极大的提高多个模块合作的协同性,可测试性,可扩展性。换言之,nginx在处理每一个http请求,和配置文件上的顺序没有关系。 ### 1 post-read 接受到完整的http头部后,读取请求内容阶段,nginx读取并解析完请求头之后就立即开始执行; ### 2 server-rewrite 在uri与location匹配之前修改请求的URI(重定向),在server块中的请求地址重写阶段; ### 3 find-config 配置查找阶段,根据请求uri匹配location表达式,这个阶段不支持nginx模块注册处理程序,而是由ngx_http_core_module模块来完成当前请求与location配置快之间的配对工作; ### 4 rewrite location块中的请求地址重写阶段,当rewrite指令用于location中,即运行。另外,ngx_lua模块中的set_by_lua指令和rewrite_by_lua指令也在此阶段; ### 5 post-rewrite 请求地址重写提交阶段,防止递归修改uri造成死循环,(一个请求执行10次就会被nginx认定为死循环)该阶段只能由ngx_http_core_module模块实现 ### 6 preaccess 访问权限检查准备阶段,http模块介入处理阶段,标准模块ngx_limit_req和ngx_limit_zone就运行在此阶段,前置可以控制访问的频率,后者限制访问的并发度 ### 7 access 访问权限检查阶段,标准模块ngx_access,第三方模块nginx_auth_request以及第三方模块ngx_lua的access_by_lua 指令运行在此阶段,配置指令多是执行访问控制性质的任务,比如检查用户的访问权限,检查用户的来源IP地址是否合法; ### 8 post-access 访问权限检查提交阶段;如果请求不被允许访问nginx服务器,该阶段负责向用户返回错误响应; ### 9 try-files 配置项try_files处理阶段 如果http请求访问静态文件资源,try_files配置项可以使这个请求顺序地访问多个静态文件资源,直到某个静态文件资源符合选取条件; ### 10 content 内容产生阶段,大部分HTTP模块会介入该阶段,是所有请求处理阶段中最重要的阶段,因为这个阶段的指令通常是用来生成HTTP响应内容的; ### 11 log 日志模块处理阶段,记录日志; ![img](https://st.90.vc/upic/1468231-20190708154207553-1736903828.png) 最后修改:2020 年 05 月 05 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏