加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

NGINX:设置X-Accel-Expires时缓存

发布时间:2020-12-13 21:41:12 所属栏目:Nginx 来源:网络整理
导读:我在静态内容和Last-Modified标头上添加了一个X-Accel-Expires标头. 我想知道什么是正确的设置来缓存这些元素而不缓存其他任何东西. 这是我目前所拥有的,但它没有缓存任何东西: http {include /etc/nginx/mime.types;access_log /var/log/nginx/access.log;

我在静态内容和Last-Modified标头上添加了一个X-Accel-Expires标头.
我想知道什么是正确的设置来缓存这些元素而不缓存其他任何东西.

这是我目前所拥有的,但它没有缓存任何东西:

http {
include       /etc/nginx/mime.types;

access_log  /var/log/nginx/access.log;

sendfile        on;
client_max_body_size 2000m; 
keepalive_timeout  65;
tcp_nodelay        on;

gzip  on;
gzip_disable "MSIE [1-6].(?!.*SV1)";

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

ssl_certificate /etc/nginx/chain.pem; 
ssl_certificate_key /etc/nginx/key.key;

proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache:30m max_size=1G;
proxy_temp_path /var/lib/nginx/proxy 1 2;
proxy_cache_use_stale error timeout invalid_header http_502;

server {
    listen       80;
    server_name domain;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_read_timeout 700;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
最佳答案
要缓存内容,首先需要在http上下文中创建一个proxy cache path,如下所示:

proxy_cache_path    /var/cache/nginx/site1    levels=1:2    keys_zone=site1:10m max_size=1G;

然后,您还可以选择定义proxy cache key.任何具有与缓存条目相同的缓存密钥的请求都将收到缓存的答复(如果有).但默认可能已经足够好了,所以,这完全是可选的.

然后要在给定的上下文中启用缓存,只需提及应使用哪个缓存,如下所示:

proxy_cache    site1;

根据proxy cache valid指令的描述,nginx已经尊重X-Accel-Expires并对其采取行动,你基本上已经完成了这一点.由于您不想缓存任何不包含X-Accel-Expires的内容,因此您可能希望将值0添加为默认有效时间(在内容中设置X-Accel-Expires应覆盖此默认值).

proxy_cache_valid    0m;

我认为除了没有任何缓存之外,您的配置文件在其他方面是有效的,并且您的代理本身已经有效.

然后,基本上,您需要做的就是修改配置,将以下内容添加到您的http,服务器或位置上下文中:

proxy_cache    cache;
proxy_cache_valid    0m;

(此外,您可能希望确保缓存路径存在且具有正确的权限.)

关于上面提到的habrahabr文章/示例,我认为在缓存键中包含$http_if_modified_since实际上并不正确,因为您可能最终会得到大量的多缓存条目,从而有效地浪费了缓存.

另请注意,nginx可能不会代理X-Accel-Expires标头 – 它只在内部使用它,而IIRC可能无法向前提供此标头.要改变这种行为,你必须明确要求它被代理(如果你想通过nginx调试你的内容,看看你的应用程序如何设置标题等):

proxy_pass_header "X-Accel-Expires";

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读