微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何干掉这个Nginx配置?

我正在使用Nginx 0.8.54尝试以尽可能的方式实现以下目标:

>代理直接到localhost:8060如果cookie no_cache为true或者请求方法不是GET.
>否则从$document_root / static / $uri提供静态文件.
>如果不存在此类文件,请尝试$document_root / cache / $uri和$document_root / cache / $uri.html.
>如果请求路径为/,请尝试不使用静态文件,只需$document_root / cache / index.html.
>如果找不到静态文件或缓存文件,最后回退到localhost:8060.

当前配置文件

server {
    root /srv/web/example.com;
    server_name example.com;

    location @backend { proxy_pass http://localhost:8060; }

    location / {
        if ($cookie_no_cache = true) { proxy_pass http://localhost:8060; }
        if ($request_method != GET) { proxy_pass http://localhost:8060; }
        try_files /static/$uri /cache/$uri /cache/$uri.html @backend;
    }

    location = / {
        if ($cookie_no_cache = true) { proxy_pass http://localhost:8060; }
        if ($request_method != GET) { proxy_pass http://localhost:8060; }
        try_files /cache/index.html @backend;
    }
}
最佳答案
http {
  map $cookie_no_cache $cacheZone {
    default "";
    true    X;
  }

  server {
    root /srv/web/example.com;
    server_name example.com;

    error_page 405 = @backend;

    location / {
      try_files /cache$cacheZone/$uri.html /static$cacheZone/$uri
                /cache$cacheZone/$uri @backend;
    }

    location @backend {
      proxy_pass http://localhost:8060;
    }
  }
}

说明.

>关于“no_cache”cookie检查.我们正在用Nginx地图替换它.变量$cacheZone取决于$cookie_no_cache的值.认情况下它是空的,但是如果有一个“no_cache = true”cookie,我们将$cacheZone设置为任何值来修改try_files中的静态文件搜索路径 – 我希望你的服务器根目录下没有/ cacheX和/ staticX文件夹(如果是,请为$cacheZone选择另一个值)
> Nginx无法将HTTP方法PUT或POST应用于静态文件(这没有意义),因此在这种情况下它会发出HTTP错误405“Not Allowed”.我们通过error_page拦截它并将请求传递给@backend位置.

替代方法

否则,使用proxy_cache:

http {
  proxy_cache_path example:1m;

  server {
    root  /srv/web/example.com;
    server_name example.com;

    location / {
      proxy_cache example;
      proxy_cache_bypass $cookie_no_cache;
      proxy_cache_valid 200 10s;
      proxy_pass http://localhost:8060;
    }
  }
}

原文地址:https://www.jb51.cc/nginx/435623.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐