首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >nginx作为缓存代理不缓存任何内容

nginx作为缓存代理不缓存任何内容
EN

Stack Overflow用户
提问于 2012-02-11 00:07:31
回答 4查看 42.4K关注 0票数 22

我正在尝试缓存静态内容,这些内容基本上位于虚拟服务器配置中的以下路径中。由于某些原因,文件不会被缓存。我在缓存目录中看到了几个文件夹和文件,但它总是像20mb一样,不高也不低。例如,如果它缓存图像,将至少占用500mb的空间。

下面是nginx.conf缓存部分:

代码语言:javascript
复制
** nginx.conf **
proxy_cache_path /usr/share/nginx/www/cache levels=1:2 keys_zone=static$
proxy_temp_path /usr/share/nginx/www/tmp;
proxy_read_timeout 300s;

这是默认的虚拟服务器。

代码语言:javascript
复制
**sites-available/default**
server {
    listen   80; 

    root /usr/share/nginx/www;
    server_name myserver;
    access_log /var/log/nginx/myserver.log main;
    error_log /var/log/nginx/error.log;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location ~* ^/(thumbs|images|css|js|pubimg)/(.*)$ {
            proxy_pass http://backend;
            proxy_cache static;
            proxy_cache_min_uses 1;
            proxy_cache_valid 200 301 302 120m;
            proxy_cache_valid 404 1m;
            expires max;
    }

    location / {
            proxy_pass http://backend;
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-11 02:20:05

请确保您的后端不返回Set-Cookie header。如果Nginx看到它,它会禁用缓存。

如果这是你的情况,最好的选择是修复你的后端。当无法修复后端时,可以指示Nginx忽略Set-Cookie报头

代码语言:javascript
复制
proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";

请参阅documentation

proxy_ignore_header将确保缓存发生。proxy_hide_header将确保Cookie有效负载不包括在缓存的有效负载中。这对于避免通过NGINX缓存泄漏cookie非常重要。

票数 52
EN

Stack Overflow用户

发布于 2015-10-07 04:11:31

我想补充的是,多个配置选项和组合可以禁用Nginx中的代理缓存。不幸的是,这方面的文档很少。

在我的配置中,我设置了proxy_buffering on,它按照预期启用了缓存。

票数 18
EN

Stack Overflow用户

发布于 2017-09-17 23:56:42

经过多次回答和评论,我发现这个配置终于起作用了:

10m = 10mb密钥缓存,max_size to 2GBinactive=120m (120分钟不活动后从源刷新),use_temp_path=off (减少io)

proxy_cache_valid - 200302的缓存状态60分钟

代码语言:javascript
复制
proxy_cache_path /tmp/cache levels=1:2 keys_zone=default_cache:10m max_size=2g
                 inactive=120m use_temp_path=off;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 60m;

server {
    listen       80;
    server_name  example.com;

    # https://www.nginx.com/blog/nginx-caching-guide
    location / {
        proxy_cache default_cache;
        proxy_buffering on;
        proxy_ignore_headers Expires;
        proxy_ignore_headers X-Accel-Expires;
        proxy_ignore_headers Cache-Control;
        proxy_ignore_headers Set-Cookie;

        proxy_hide_header X-Accel-Expires;
        proxy_hide_header Expires;
        proxy_hide_header Cache-Control;
        proxy_hide_header Pragma;

        add_header X-Proxy-Cache $upstream_cache_status;
        proxy_pass http://ip-of-host:80;

        #set            $memcached_key "$uri?$args";
        #memcached_pass 127.0.0.1:11211;
        # error_page     404 502 504 = @fallback;
    }
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9230812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档