Nginx为uwsgi服务做缓存的配置方法
概述 跟着互联网用户的增进,绝大部门互联网应用对并发量和相应速率都有较量高的要求。说到相应速率就离不开缓存,缓存又有客户端缓存与处事端缓存之分,本文先容的是处事端缓存。网上搜刮到的行使nginx为uwsgi处事接口举办缓存的资料较量少,搜刮到的大部门都是行使nginx为http处事可能是静态资源的缓存,可能在应用代码中插手redis、memcached等实现缓存。这里基于nginx(v1.15.2)+uwsgi+python的实践情形,先容怎样行使nginx作为python后端应用缓存,首要从以下几方面举办报告: 1. 为什么行使nginx作为缓存层,而不是在应用层实现缓存? 2. nginx中怎样设置 3. 留意事项与实践思索 缓存为什么配置在nginx层 配置缓存是须要的,这里就说说为什么将一些哀求的缓存配置在nginx层,而不是处事应用层。来由如下: 一样平常来说,nginx作为署理处事器的脚色,把缓存配置在nginx中,在掷中缓存的环境下,可以节省一次哀求转发的时刻。 nginx自己行使C说话实现,比一样平常的说话尤其是动态说话(python等)的机能要高。因此nginx读取缓存的速率要比后端应用读取的速率快。 汗青项目中没有引入缓存,在nginx中加缓存设置比写应用代码来得快。 虽然, 必要由应用判断用户权限的接口并不得当把缓存配置在nginx层 设置要领 nginx可以署理的处事协议有多种(好比 http, uwsgi, fastcgi), 这里以uwsgi协议的设置作为例子,其他协议的根基是把设置指令中 cache前面的 uwsgi替代为协议对应的笔墨即可(好比 http 对应 proxy, fastcgi 对应 fastcgi)。这里先上一个根基的设置文件,然后对要害的设置指令一一报告它的设置要领及浸染。 以上设置文件中,有cache字样的都是与缓存相干的设置指令。它们的浸染及设置要领如下: 1.uwsgi_cache_path,设置缓存内容存放的位置、定名以及目次的分派方法。 /tmp/nginx是缓存文件存放的位置; keys_zone对应的值是缓存空间的名字及巨细,此处名字是 myapp, 巨细是128M; levels参数是配置缓存文件所存放的子目次,这里1:2的意思是取缓存key(下文将要讲到的 uwsgi_cache_key)的MD5值倒数第一个字母为1级目次,倒数第二第三个字母为二级目次,在上述设置中key的MD5值为 4897858cede04cdd6676d87fd9e9163e的缓存会落在 /tmp/nginx/e/63目次上;inactive参数是指多长时刻不被掷中时,该缓存内容会被删除,这里是24小时没有掷中则删除。除了这里说起的参数外,尚有其他可选参数,,见官方文档 。 2.add_header Nginx-Cache "$upstream_cache_status",不提议在出产情形中插手这一行设置,该设置是配置一个相应头符号缓存掷中状态,用于调试。 3.uwsgi_cache_valid 200 36h,该指令设置缓存哪些状态码的哀求及缓存时刻。这里仅当相应状态码为200时举办缓存, 缓存36小时。 4.uwsgi_cache_key $request_method_$request_uri$args,配置缓存的key,这里配置为哀求要领+哀求uri+参数,可以按照必要行使nginx提供的其他变量。 5.uwsgi_cache_use_stale timeout http_500 http_503,该指令用于设置后端应用呈现哪种环境时,可以行使逾期的缓存内容。 6.uwsgi_cache myapp,配置行使的缓存空间名字,与 uwsgi_cache_path中的keyszone相对应。该指令支持的上下文有 http、 server和 location, 写在 location中可觉得差异的接口设置差异的空间。 留意事项 说了根基设置,接着说一些值得留意的处所 uwsgi_cache_key的配置key可以行使nginx中的变量满意各类伟大环境,可是提议不要配置得过于伟大,满意营业需求即可,由于越伟大掷中率越低。假如插手了用户的cookie作为key,就是基于用户的缓存,只有统一个用户再次提倡沟通哀求时才会掷中,掷中率很低。 uwsgi_cache_valid的配置这个指令必然要设置公道,不然也许会缓存400等相应内容。除了200状态码之外,也可以按照必要为其他状态码的相应举办缓存,可是缓存时刻应该短一点。好比为302的相应内容缓存10s。 实践优化 在出产实践中还可以接口的相应内容、接口的行使频率、接口内容的更新时刻等配置更公道的逾期时刻、缓存空间等。可以将行使频率高、相应内容复杂的接口单独分别缓存空间。 借助日记说明掷中率。可以在nginx的哀求日记中插手掷中状态变量 upstream_cache_status,网络日记举办统计。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |