网站首页 文章专栏 nginx反向代理数据缓存
nginx反向代理数据缓存
编辑时间:2022-10-28 17:26:11 作者:linxi 浏览量:195

1、场景描述:

用nginx代理前端,转发到后端。前端请求某个接口时,返回数据量小,不报错;数据量大,报错:net::ERR_INCOMPLETE_CHUNKED_ENCODING 200


2、问题分析:

监测后端返回,发现有response,结果正确;然后再查找nginx日志(error.log),发现写缓存文件权限不足。

当nginx代理后端的数据量小时,直接返回给前端;当数据量大时,需要写入到缓存目录,然后转发给前端。(这就是问题所在

image.png


3、解决方案

找到nginx代理缓存目录,将用户、组、权限配好:

chown -R nobody:nobody ./proxy_temp

image.png

可以看见,当我们配置好后,就能写入了,请求也就恢复正常了。


4、配置示例


proxy_cache_path /opt/www/cache levels=1:2 keys_zone=test_cache:10m max_size=10g inactive=60m use_temp_path=off;

server { 

listen 80;

server_name cache.test.com;

#rewrite ^/(.*)$ https://${server_name}$1 permanent;    #跳转到Https

 

     if ($request_uri ~ ^/(test.html|login|register|password|\/reset)) {

            set $cookie_nocache 1;

     }

 

location / { 

    proxy_cache test_cache; #要和proxy_cache_path 的 keys_zone值相等

            proxy_pass http://127.0.0.1:8081;

            proxy_cache_valid 200 304 12h;

            proxy_cache_valid any 10m;

            proxy_cache_key $host$uri$is_args$args;

            proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;

            proxy_no_cache $http_pragma $http_authorization;

    }

}


说明:

proxy_cache_path 缓存文件路径

levels 设置缓存文件目录层次;levels=1:2 表示两级目录

keys_zone 设置缓存名字、开辟空间的大小,10m表示10 MB的大小

max_size 此目录最大空间大小,10g表示10 GB的大小。假如超过了10G,nginx会根据自己的淘汰删除规则删除一部分缓存数据,默认覆盖掉缓存时间最长的缓存数据。

inactive 在指定时间内没人访问则被删除,60m表示60分钟

use_temp_path 用来存放临时文件,建议设置为off


来说两句吧
最新评论
  • admin 2023-05-21 21:43:26
    ddd
  • admin 2022-11-11 23:43:04
    123456