美文网首页PHP经验分享Api设计Nginx高端成长之路
【充电】《Nginx核心知识100讲》geo模块、geoip模块

【充电】《Nginx核心知识100讲》geo模块、geoip模块

作者: 言十年 | 来源:发表于2019-01-16 19:16 被阅读19次

    极客专栏《Nginx核心知识100讲》79~81小节,笔记
    注意:这个是看专栏视频,敲的哈。这个专栏让我收货蛮大的。

    79 | 根据IP地址范围的匹配生成新变量:geo模块

    介绍一个与map,split_client非常相似的模块—— geo模块。基于已有的变量值生成新的变量值。不同的是,基于的已有变量必须是ip地址。可以基于IP地址,子网掩码这样的匹配方式来生成新的变量值。根据IP地址确定它的范围确定它的低于所属。

    配置介绍

    image.png image.png

    示例

    image.png image.png image.png

    当我们需要根据ip地址、地址范围、子网掩码做匹配来生成新变量,这个时候我们使用geo是一个非常好的选择。

    留言问题

    1.又翻了相关几节课视频,proxy的意义是指定信任的服务器ip么?可以指定多台服务器么,比如ip段、正则匹配?

     作者回复
    对的。可以指定多台服务器,可以使用子网掩码的方式指定一段IP地址,不能使用正则匹配。

    2.请问proxy是可以随便写么?只要有值就能达到remote_addr取最后一个ip的效果么

     作者回复
    在生产环境下,proxy不能随便写,通常必须是nginx的直接下游服务器的地址(如果有的话)。

    3.可以通过GEO模块 匹配到 IP的 归属范围

     作者回复
    是的

    80 | 使用变量获得用户的地理位置:geoip模块

    如果我们需要根据ip地址找到地理位置的信息, 那么我们完全可以使用geoip模块。这个模块可以根据预先编译好的maxmind 这个ip地址库自动计算出ip地址所属的地域与相关信息。

    image.png image.png image.png image.png

    首先打开maxmind的网站 https://www.maxmind.com/zh/home 下载代码跟地址库。然后安装。

    image.png image.png

    配置好之后我们怎么检测数据的正确性,我们可以找些代理网站,拿几个ip试试。

    image.png image.png image.png image.png

    geo模块提供了很多关于地域信息的变量,我们可以在后续的其他模块或者在日志分析中使用这些变量的值。

    留言问题

    1. geoip模块的底层原理是什么 会影响NGINX性能吗

     作者回复
    原理是生成几个变量如geoip_area_code,当一些模块使用到该变量(例如log模块),则调用取变量值的函数(见第72课),在函数中,会调用GeoIP库里的相关函数(例如GeoIP_country_code_by_ipnum),而这些函数的性能还不错,所以对Nginx性能影响不大。

    81 | 对客户端使用keepalive提升连接效率

    keepalive可以有效的提升我们的连接的使用效率。

    image.png

    功能

    减少了内存的消耗。

    拥塞控制,所以它的窗口是逐渐增大的。如果我们的链接没有断开过,一直保持在它的最佳状态的。

    协议

    nginx向客户端返回的时候也可以加connection的头部。

    keep-alive比较少用。

    行为控制

    image.png

    keepalive_requests 表示在一个tcp连接上,最多执行多少个http请求。

    keepalive_timeout 后面跟了两个timeout。第一个timeout表示用户一个http请求完成以后最多经过timeout时间,如果还没有新请求进来就会关连接。默认75秒。后一个timeout就是nginx通过keepalive头部向浏览器表示这个链接保留多少秒。

    留言问题

    1.我这边经常用loadrunner测试nginx反向代理时性能,发现打开keepalive(keepalive_timeout不等于0)时,nginx服务器的新建性能指标(hit/sec或每秒支持多少个新建tcp连接)的指标会比关闭keepalive(keepalive_timeout=0)时低好多,这是测试场景问题,还是nginx处理机制问题。
    我反向代理的测试页面是大小为6k和10k的静态html页面。
    这个真实生产下keepalive是否打开是否和反向代理的web类型有关系呢。
    是否打开nginx的keepalive需要主要参考什么来做决定呢。

     作者回复

    • 1、我猜测是测试场景问题,nginx处理机制对此没有问题。
    • 2、没有关系。
    • 3、主要参考性能要求,使用keepalive能提升网络效率,包括TCP握手消耗、TCP拥塞控制等。

    2.用NGINX做负载均衡服务器 建议对 后端机器 开启 keepalive 吗

     作者回复
    如果对性能有要求,建议打开。

    3.专栏里面的每一个视频的知识点都讲的很深入。但是不知道怎么串起来,可否提供一些应用场景?

     作者回复
    可以尝试用wordpress搭个博客站点:-)

    4.ab -c 2000 -n 2000 http://192.168.0.191/index.php
    老师请问 压测nginx服务器端时 为什么在服务器打开watch查看状态连接状态 都是timewait 或是syn-recv 没有establish状态 需要怎样配置 才能模拟出现多个establish状态
    TIME-WAIT 0 0 xxxxxxx:45838 xxxxxxxx:80

     作者回复
    把index.php换成一个很大的文件...

    相关文章

      网友评论

        本文标题:【充电】《Nginx核心知识100讲》geo模块、geoip模块

        本文链接:https://www.haomeiwen.com/subject/elcmdqtx.html