搜索
您的当前位置:首页正文

NGINX模块的功能

2020-11-09 来源:步旅网

未完待续: 有几个阶段是特例,它不调用挂载地任何的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_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

步旅网还为您提供以下相关内容希望对您有帮助:

nginx有哪些模块

标准HTTP模块:这些模块支持HTTP协议的功能,如静态文件处理、反向代理、负载均衡等。它们为处理HTTP请求提供了必要的功能。比如,Nginx可以通过这些模块处理静态文件请求,进行反向代理,将请求转发到其他服务器处理等。这是Nginx最常用的功能之一。邮件服务模块:这些模块用于支持Nginx的邮件服务功能,包括SMTP协...

Nginx的rewrite模块详解

Nginx的rewrite模块是ngx_http_rewrite_module,主要用于修改请求的URI,是Nginx默认安装的一部分。它依据正则表达式匹配并重写URI,接着可能进行内部跳转或30x重定向。执行顺序是:首先根据rewrite后的URI匹配location块,然后按顺序执行location中rewrite指令,遇到break指令时会停止当前模块指令但不影响其他模块...

nginx有什么用

3. 负载均衡:在大规模的网络服务中,为了提升服务的性能和可靠性,往往需要使用多台服务器来共同处理请求。Nginx内置了多种负载均衡策略,可以智能地将客户端的请求分发到不同的服务器上,从而实现高效的负载均衡。4. HTTP模块扩展性强:Nginx支持各种HTTP模块,这使得它可以在处理HTTP请求时实现很多高级...

Nginx的rewrite模块详解

rewrite模块是ngx_http_rewrite_module的一部分,用于重写请求URI,是Nginx中内置的默认模块。此模块使用正则表达式进行匹配,根据规则进行重写,然后依据匹配的结果进行内部跳转或直接返回30x重定向。执行流程分为两个主要步骤:首先匹配location块中的rewrite指令,然后处理请求。执行顺序方面,依据匹配后的请求U...

nginx 配置系列(五)限制连接数

③、防止攻击 详细说明:ngx_http_limit_conn_module 模块对于一些服务器流量异常、负载过大,甚至是大流量的恶意攻击访问等,进行并发数的限制。该模块可以根据定义的键来限制每个键值的连接数。并不是所有的连接都被计算在内,只有当服务器处理了一个请求,并且整个请求头已经被读取时,才会计算连接。该...

Nginx:upstearm模块

1. 图片处理通过后端服务器,静态页面处理另一个后端,动态页面处理第三个。Nginx的upstream模块提供五种负载分配策略:轮询、权重分配、IP哈希、fair(响应时间)和URL哈希(缓存优化)。实验步骤包括安装Nginx,配置默认配置文件,将PHP解析注释掉以分发给后端服务器,配置后端服务器,上传图片到服务器,并...

nginx是什么意思

4. 模块化结构:Nginx是模块化的设计,允许开发者根据需要添加或删除模块来扩展其功能。例如,可以添加SSL支持、负载均衡算法等模块。5. 支持多种应用层协议:除了HTTP外,Nginx还支持其他应用层协议,如HTTPS、SMTP等,使其成为全功能的网络服务器。Nginx由于其高效、稳定和灵活的特性,被广泛应用于各种...

nginx 获取客户端真实 IP 详细解析实践

nginx 通过 ngx_http_realip_module 模块获取客户端真实 IP。通常网络请求会经过多层代理,而真实应用服务器需获取客户端的原始 IP 地址。本文章详细解析 nginx 如何实现这一功能,并在作为反向代理时如何传递客户端真实 IP 给应用服务器。首先,nginx 使用 ngx_http_realip_module 模块的三个关键指令:...

什么是nginx

4. 模块化的配置结构 Nginx的配置非常灵活和模块化。开发者可以通过简单的配置文件来定义服务器的行为,包括如何处理请求、如何响应等。这种模块化的结构使得Nginx易于扩展和维护。总结:Nginx不仅是一个高效的HTTP服务器,还具备强大的反向代理功能。其高性能、轻量级的特点以及模块化的配置结构,使其成为...

学习Nginx(九):提升网站速度之gzip压缩 介绍

Nginx的gzip压缩功能是提升网站速度的关键工具,其核心在于ngx_http_gzip_module模块,它能拦截请求并对CSS、JS、XML、HTML等静态资源进行服务器端压缩。压缩后的数据发送给用户,浏览器接收后解压,从而减少文件传输量,缩短响应时间,提升用户体验。然而,gzip压缩并非无代价,它在压缩和解压缩过程中消耗CPU...

Top