今天就跟大家聊聊有关Nginx中怎么配置uwsgi服务做缓存,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
缓存为什么设置在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中怎么配置uwsgi服务做缓存有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。