您好,欢迎访问三七文档
当前位置:首页 > 法律文献 > 理论/案例 > nginx学习分享串讲
nginx学习分享JDBModestymakesoneprogress,pridemakesonelagbehind.串讲人:刘豪伟2019年3月15日1Nginx实现反向代理2Nginx实现页面缓存3Nginx实现负载均衡CONTENTS01Nginx做反向代理现实生活中的例子正向代理与反向代理1、正向代理:访问google.com如上图,因为目前google已被和谐,我们需要vpn才能科学访问google.comvpn对于“我们”来说,是可以感知到的(我们连接vpn),vpn对于”google服务器”来说,是不可感知的(google只知道有http请求过来)。对于人来说可以感知到,但服务器感知不到的服务器,我们叫他正向代理服务器。现实生活中的例子正向代理与反向代理2、反向代理:通过反向代理实现负载均衡如上图,我们访问baidu.com的时候,百度有一个代理服务器,通过这个代理服务器,可以做负载均衡,路由到不同的server。此代理服务器,对于“我们”来说是不可感知的(我们只能感知到访问的是百度的服务器,不知道中间还有代理服务器来做负载均衡)。对于人来说不可感知,但对于服务器来说是可以感知的,我们叫他反向代理服务器。说白了:“正向”、“反向”是相对于人的感知来说的。人能感受到的代理就是正向代理,人感受不到的代理就是反向代理总结反向代理的例子location/{proxy_pass}指令语法模块:ngx_http_proxy_module指令:proxy_pass:指定上游服务器的ip和端口proxy_set_header:添加一个新的首部nginx实现反向代理nginx是高度模块化的,各个功能都封装在模块中,而各个模块的初始化则是根据配置文件来进行的。实现反向代理的模块Syntax:proxy_passURL;Default:—Context:location,ifinlocation,limit_except例子:proxy_pass:proxy_set_headerfieldvalue;Default:proxy_set_headerHost$proxy_host;Context:http,server,locationnginx的配置中,可以使用变量内置变量:nginx自带的自定义变量:用户定义的,定义方法:set变量名变量值演示配置如果location中使用了模式匹配(正则),那么,location中的url会直接补充到代理节点的后面,此时,上游服务器的的后面不能有任何内容,包括/location~\.php${proxy_pass正确写法proxy_pass正确写法proxy_pass错误写法proxy_pass错误写法}此时,如果请求的url是,就会代理成补充1nginx实现反向代理location/admin{proxy_pass://}请求的url是如果代理方式是proxy_pass那么去那么去语法:rewriteregex(表达式)replacement(替换项)flag(标志位)。标志位:break:本条规则匹配完成后,终止匹配,不再匹配后面的规则last:相当于apache里面的[L]标记,表示rewrite,完成重写指令,之后搜索相应的URI或locationpermanent:返回301永久重定向,浏览器地址会显示跳转后的URL地址redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址补充3nginx实现反向代理在location中如果有重定向的话,那么就用重定向后的uri替换掉代理节点中的urilocation/{rewrite/(.*)$/index.php?name=$1break;proxy_pass}此时,如果请求的url是,就会代理成=bajie补充402Nginx实现页面缓存点击添加标题文字问题对于缓存,我们大概会有以下问题:(1)缓存文件放在哪儿?(2)如何指定哪些请求被缓存?(3)缓存的有效期是多久?(4)过了有效期的数据是否还能使用?(5)对于某些请求,是否可以不走缓存?Nginx实现页面缓存需要注意的是Nginx缓存需要结合反向代理一起才能实现缓存格式:key-value格式key储存在内存中:就是将请求的urivalue储存在磁盘上:就是缓存的数据Nginx缓存的基本思路:利用请求的局部性原理,将请求过的内容在本地建立一个副本,下次访问时不再连接到后端服务器,直接响应本地内容Nginx服务器启动后,会对本地磁盘上的缓存文件进行扫描,在内存中建立缓存索引,并有专门的进程对缓存文件进行过期判断、更新等进行管理点击添加标题文字(1)缓存文件放在哪儿?Nginx实现页面缓存设置缓存数据的相关信息path:缓存目录的位置levels:指定使用几级缓存目录keys_zone:指定缓存区域的名称和缓存空间的大小proxy_cache_path/data/nginx/cachelevels=1:2keys_zone=one:10m;缓存结果:/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c点击添加标题文字(2)如何指定哪些请求被缓存?Nginx实现页面缓存1.如果开启了缓存:nginx默认会缓存所有get和head方法的请求结果,缓存的key默认使用请求字符串2.指定哪些请求方法的请求被缓存3.指定请求至少被发送了多少次以上时才缓存,可以防止低频请求被缓存点击添加标题文字(3)缓存的有效期是多久?Nginx实现页面缓存proxy_cache_valid20030210m;定义了返回状态码是200和302的请求其数据缓存十分钟proxy_cache_validany1m;定义返回任何状态码的请求其数据都缓存1分钟点击添加标题文字(4)过了有效期的数据是否还能使用?Nginx实现页面缓存error:上游服务器响应error的时候timeout:表示上游服务器响应超时的时候updating如果当前正在更新,该参数允许使用陈旧的缓存响应。哪种情况下可以使用过期的数据点击添加标题文字(5)对于某些请求,是否可以不走缓存?Nginx实现页面缓存proxy_cache_bypass$cookie_nocache$arg_nocache$arg_comment;proxy_cache_bypass$http_pragma$http_authorization;如果任何一个字符串参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发哪种情况下可以不使用缓存点击添加标题文字Nginx实现页面缓存演示配置http段:proxy_cache_path/cache/nginxlevels=1:1keys_zone=mycache:100m;Server段:proxy_cachemycache;proxy_cache_valid20030210m;proxy_cache_valid3011h;proxy_cache_validany1m;proxy_cache_use_staleerrortimeoutinvalid_headerupdatinghttp_500;}扩展:如何检查我所请求的数据是哪个主机发送给我的?添加首部add_headerserverHost$server_addr;如果检查我所请求的数据在缓存中是否存在?添加首部add_headercacheStatus$upstream_cache_status;03Nginx实现负载均衡点击添加标题文字Nginx实现负载均衡nginx负载均衡是ngx_http_upstream_module模块的功能,需要在配置文件http块上下文中定义upstream块,指定一组负载均衡的后端服务器,然后在上面讲到的proxy_pass中引用,就可以反向代理时实现负载均衡了。需要注意的是:ngx_http_upstream段要在server段前面,要定义在http段中。要实现基本的负载均衡用到的指令很简单点击添加标题文字Nginx实现负载均衡作用:定义一个上游服务器组格式upstreamname{server上游服务器1参数参数;server上游服务器1参数参数;server上游服务器1参数参数;}注意:定义服务器组的时候,不能写{server=5;server127.0.0.1:8080max_fails=3fail_timeout=30s;server}fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails:和fail_timeout一起使用,进行对后端服务器的健康状态检查;指令:upstream点击添加标题文字Nginx实现负载均衡演示配置http段:upstreammyservers{ip_hash;server10.220.5.180weigjt=1;server10.220.5.181weight=2;}Server段:location/test{proxy_pass}演示配置http段:upstreammyservers{server10.220.5.180weigjt=1;server10.220.5.181weight=2;}Server段:location/test{proxy_pass}点击添加标题文字Nginx实现负载均衡upstream支持4种负载均衡调度算法:A)轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;B)ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。C)url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率。D)fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。串讲人:刘豪伟2019年3月15日感谢您的观看!JDBDoonethingatatime,anddowell.
本文标题:nginx学习分享串讲
链接地址:https://www.777doc.com/doc-1735646 .html