【问题标题】:do i need to change the owner of nigix cache files to the owner of application folder我需要将 nginx 缓存文件的所有者更改为应用程序文件夹的所有者吗
【发布时间】:2013-03-27 07:13:47
【问题描述】:

我已经在我的 ubuntu 中设置了 nginx 作为反向代理缓存服务器。

文件缓存在 mywebroot/cache 文件夹位置

此文件夹的所有者和内容是 www-data,我的应用所有者是 root

我应该将缓存文件的所有者更改为 root 以便从 nginx 缓存提供页面吗?

编辑:

Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection  keep-alive
Content-Encoding    gzip
Content-Length  3817
Content-Type    text/html; charset=utf-8
Date    Fri, 29 Mar 2013 10:19:23 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Pragma  no-cache
Server  nginx/1.1.19
Vary    Accept-Encoding
X-Cache-Status  MISS
X-Powered-By    PHP/5.3.10-1ubuntu3.6

这是我在萤火虫中的回应

【问题讨论】:

  • 您有什么顾虑?假设 www-data 是运行 nginx 工作进程的用户,我认为没有理由这样做。
  • @ChuanMa:我的应用程序页面被缓存在 nginx 缓存目录下。但是我不确定当相同的请求到达 nginx 时,它是从缓存中提供的。我在我的 nginx/sites-available/default add_header X-Cache $upstream_cache_status 中添加了这个;但我不知道如何验证。我对 nginx 非常陌生
  • @ChuanMa:运行nginx工作进程的用户是www-data
  • 您可以使用浏览器的开发者控制台查看标头的值。例如,在 chrome 的控制台中,有一个“网络”选项卡。您可以从那里查看响应标头,并查看缓存状态的 X-Cache 值。
  • @ChuanMa:我无法在chrome控制台的网络选项卡下找到X-Cache值。

标签: caching nginx reverse-proxy


【解决方案1】:

参考:http://wiki.nginx.org/HttpProxyModule#proxy_cache

以下响应标头将响应标记为不可缓存,除非 它们被忽略:

Set-Cookie
Cache-Control containing "no-cache", "no-store", "private", or a "max-age" with a non-numeric or 0 value
Expires with a time in the past
X-Accel-Expires: 0

根据您更新的问题,您的上游服务器返回过去的到期时间和 Cache-control: no-cache 等。

Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires Thu, 19 Nov 1981 08:52:00 GMT
Pragma  no-cache

所以 nginx 正确地没有缓存它。一种方法是告诉 nginx 忽略这些标头以确定缓存并隐藏错误的 Expires 标头等。

proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
proxy_hide_header Pragma Expires Cache-Control;

正如post 建议的那样,您也可以设置,例如,

expires 1d;

使代理缓存过期 1 天。

【讨论】:

  • 我稍后会对此进行测试并更新状态。由于此服务器也用于其他一些应用程序,因此我无法立即更改配置并测试输出。
  • 我在我的 nginx 配置中添加了 proxy_ignore_headers X-Accel-Expires Expires Cache-Control。现在我得到一个 HIT。但我注册的用户无法注销应用程序,并且对于不同的用户它显示相同的页面,有时它会自动注销。我遇到了很多问题。还有什么我应该防止这种不寻常的我的应用程序的行为。
  • :) 所有上游服务器响应都被缓存。所以每个人都会看到相同的反应。这就是为什么在大多数情况下您不应该缓存动态内容。您可以使用 proxy_no_cache 和 proxy_cache_bypass 指令来不缓存某些响应。
  • 有什么方法可以使用我的会话或 cookie 信息作为缓存键来缓存页面。这样至少对于一个登录会话,注册用户将从缓存中获取页面。跨度>
  • 您可以使用 proxy_cache_key 指令来指定使用任何 cookie 值的键。这很简单。见:wiki.nginx.org/HttpProxyModule#proxy_cache_key。 Nginx 以 $cookie_yourCookieName 的形式为任何 cookie 提供内置变量。见wiki.nginx.org/HttpCoreModule#.24cookie_COOKIE
猜你喜欢
  • 2013-11-13
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 2014-03-23
  • 2014-03-08
相关资源
最近更新 更多