极客专栏《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.pnggeo模块提供了很多关于地域信息的变量,我们可以在后续的其他模块或者在日志分析中使用这些变量的值。
留言问题
- geoip模块的底层原理是什么 会影响NGINX性能吗
作者回复
原理是生成几个变量如geoip_area_code,当一些模块使用到该变量(例如log模块),则调用取变量值的函数(见第72课),在函数中,会调用GeoIP库里的相关函数(例如GeoIP_country_code_by_ipnum),而这些函数的性能还不错,所以对Nginx性能影响不大。
81 | 对客户端使用keepalive提升连接效率
keepalive可以有效的提升我们的连接的使用效率。
image.png功能
减少了内存的消耗。
拥塞控制,所以它的窗口是逐渐增大的。如果我们的链接没有断开过,一直保持在它的最佳状态的。
协议
nginx向客户端返回的时候也可以加connection的头部。
keep-alive比较少用。
行为控制
image.pngkeepalive_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换成一个很大的文件...
网友评论