【问题标题】:Nginx: cache only specific urls and named locationNginx:仅缓存特定的 url 和命名位置
【发布时间】:2014-11-25 04:30:57
【问题描述】:

我有 Rails 应用程序。它有部分 nginx 配置: 上游应用服务器 { 服务器 unix:/var/www/app/shared/unicorn.sock fail_timeout=0; }

    server {
      listen 80;

      server_name app hostname;
      keepalive_timeout 5;

      root /var/www/app/current/public;
      try_files $uri/index.html $uri.html $uri @app;

      location @app {
        proxy_pass http://app_server;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_cache off;
      }

      location ~ /assets/*\.(png|gif|jpg|jpeg|css|js|swf|ico|gz)(\?[0-9]+)?$ {
        access_log off;
      }
    }

我想缓存我的应用程序的几个页面(例如所有 *.json url)。我该怎么做?

根据 nginx 文档我不能:

  • 在命名位置使用嵌套位置
  • 在 if 块中使用 proxy_cache

【问题讨论】:

    标签: nginx


    【解决方案1】:

    如果静态文件块中的扩展名不是虚拟 URL,您可以将 Json 添加到扩展名中。 如果是,您需要通过默认情况下将所有内容转发到您的应用程序并进行例外设置来进行不同的设置,这样您就不必使用命名位置。或者您可以根据命名位置内的 if 语句设置变量:

    location @app {
        set $proxy_cache_cfg "off";
        if($request_uri ~ \.json$) {
            set $proxy_cache_cfg "json_zone";
        }
    }
    

    未经测试,不确定是否应该引用“off”以及它是否可以在这里工作。如果这不起作用,您始终可以使用相反的方法并根据变量设置 proxy_no_cache,因为这对任何非空和非零都有效。

    【讨论】:

    • 谢谢!我忘记了 proxy_no_cache 选项。
    猜你喜欢
    • 2015-09-17
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2017-04-27
    • 1970-01-01
    • 2022-08-05
    相关资源
    最近更新 更多