Nginx之HTTP模块详解

        Nginx是模块化的代码架构,其代码由核心代码与功能模块代码构成。Nginx的主要功能模块是HTTP功能模块,HTTP功能模块在HTTP核心功能的基础上为Nginx对HTTP请求的处理流程提供了扩展功能,这些扩展功能可以让用户很方便地应对访问控制、数据处理、代理缓存等各种复杂的场景应用,同时也让有开发能力的用户能够积极参与,不断增强Nginx的功能。由于功能模块比较多,为了便于对各功能模块进行介绍,此处按照模块的功能进行如下分类:

                动态赋值:可根据HTTP请求的变化动态地进行变量赋值的功能模块。

                访问控制:对外部访问请求做认证、数量限制等功能的模块。

                数据处理:对用户的响应数据进行过滤或修改的功能模块。

                协议客户端:可与其他应用协议服务连接的客户端模块。

                协议服务:可运行相关应用协议服务、提供其他客户端访问的功能模块。

                代理负载:对后端服务器实现代理负载的功能模块。

                缓存功能:对响应数据内容实现缓存的功能模块。

                日志管理:对请求的日志进行管理配置的功能模块。

                监控管理:对Nginx自身状态进行监控的功能模块。

1.动态赋值功能模块

        Nginx在核心模块及其他模块中都提供了内置变量,用户可以根据需要灵活调用。在Nginx的模块中除提供了rewrite指令以方便用户对变量进行静态赋值外,还提供了根据请求内容的变化为变量动态赋值的功能。

        1.1 根据浏览器动态赋值

        模块名称:ngx_http_browser_module。该模块的功能是根据客户端HTTP请求头中的属性字段User-Agent的值,按照用户的指令配置设置变量 $modern_browser和$ancient_browser的值。用户可以根据变量$modern_browser和$ancient_browser的值对客户端浏览器进行区分,并对HTTP请求进行不同的处理。

        1.1.1 旧浏览器标识指令

名称 旧浏览器标识指令
指令 ancient_browser
作用域 http、server、location
默认值

-

指令说明 当客户端的HTTP请求头中的属性字段User-Agent的值中包含指令值中的字符串时,设置变量$ancient_browser的值为1
#配置样例如下:
http {
    ancient_browser 'UCWEB';
}
#变量$ancient_browser的值默认为1

         1.1.2 设置旧浏览器变量值指令

名称 设置旧浏览器变量值指令
指令 ancient_browser_value
作用域 http、server、location
默认值

1

指令说明 将$ancient_browser的值设置为指定的字符串
#配置样例如下:
http {
    ancient_browser 'UCWEB';
    ancient_browser_value oldweb;
    server {
        if ($ancient_browser) {
            rewrite ^ /${ancient_browser}.html;
# 重定向到oldweb.html
        }
    }
}

        1.1.3 新浏览器标识指令 

名称 新浏览器标识指令 
指令 modem_browser
作用域 http、server、location
默认值

-

指令说明 当客户端浏览器被nginx识别为内置的浏览器类型,且HTTP请求头中的属性字段User-Agent的值中的版本号等于或高于指令值的版本号时,设置变量$modem_browser的值为1
#配置样例如下:
http {
    modern_browser msie 5.5;
}

        内置浏览器类型有msie、gecko(由Mozilla基 金会维护,Mozilla及Netscape 6后续版本是基于Gecko开发的)、opera、safari、konqueror。

        当指令值为unlisted时,Nginx在HTTP请求头中 的属性字段User-Agent的值为空或无法识别浏览器类型时,设置变量$modern_browser的值为1。

#配置样例如下:
http {
    modern_browser msie 5.5;
    modern_browser unlisted;
}

        1.1.4 设置新浏览器变量值指令 

名称 设置新浏览器变量值指令 
指令 modem_browser_value
作用域 http、server、location
默认值

1

指令说明 将变量$modem_browser的值设置为指定的字符串
#配置样例如下:
http {
    modern_browser msie 5.5;
    modern_browser_value newweb;
    server {
        if ($modern_browser) {
            rewrite ^ /${modern_browser}.html;
        }
    }
}

         1.2 根据IP动态赋值

        模块名称:ngx_http_geo_module。该模块的功能是从源变量获取IP地址,并根据设定的IP与对应值的列表对新变量进行赋值。该模块只 有一个geo指令,指令格式如下:

geo [源变量]新变量{}

        geo指令的默认源变量是$remote_addr,新变量默认值为空。

        geo指令的作用域只能是http。

        geo指令的指令值参数如下:

参数名 参数描述
delete 删除配置中已经存在的相同IP地址的设定
default 如果从源变量获取的IP无法匹配任何一个IP或IP范围,通过该参数的参数值为新变量赋值
include 引入一个包含IP与对应值的外部文件
proxy 指定上层代理IP。当源变量的IP为该参数指定的IP时,nginx将从X-Fowarded-For头中获取IP
proxy-recursive 开启代理递归查询。当X-Fowarded-For头中有多个IP时,nginx会将X-Fowarded-For头中的最后一个IP定义为源变量的IP;启用该参数后,nginx会将X-Fowarded-For头中的最后一个IP与所有不属于proxy参数定义的IP定义为源变量的IP
ranges 使用地址段的形式定义的IP地址时,该参数必须放在最上面
#配置样例如下:
http{
    geo $country {
        proxy_recursive; # 启用代理递归查询
        default ZZ; # 默认值为ZZ
        include conf/geo.conf; # 引入外部列表文件
        proxy 192.168.100.0/24; # 上层代理地址为192.168.100.0/24的IP
        proxy 2001:0db8::/32; # 上层代理地址为2001:0db8::/32的IP
        127.0.0.0/16 US; # 赋值US
        127.0.0.1/32 RU; # 赋值RU
        10.1.0.0/16 RU; # 赋值RU
        192.168.1.0/24 UK; # 赋值UK
    }
}

        为了加速加载IP来设定变量表,IP地址应按升序填写。 

10.2.0.0/16 RU;
192.168.2.0/24 RU;

        以地址段形式定义的IP地址中ranges参数的配置样例如下:

http{
    geo $country {
        ranges; # 使用以地址段的形式定义的IP地址
        default ZZ;
        10.1.0.0-10.1.255.255 RU;
        192.168.1.0-192.168.1.255 UK;
    }
}

        1.3 根据IP动态获取城市信息

        模块名称:ngx_http_geoip_module

        该模块的功能是将客户端的IP地址与MaxMind数据 库中的城市地址信息进行比对,然后将对应的城市地 址信息赋值给内置变量

        1.3.1 国家信息数据库指令

名称 国家信息数据库指令 
指令 geoip_country
作用域 http
默认值

1

指令说明 指定国家信息的MaxMind数据库文件路径

         1.3.2 城市信息数据库指令

<
名称 城市信息数据库指令
指令 geoip_city
作用域 http
默认值

1

指令说明 指定城市信息的MaxMind数据库文件路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值