【问题标题】:Why nginx does not cache scripts with .html extension?为什么 nginx 不缓存带有 .html 扩展名的脚本?
【发布时间】:2013-09-04 20:49:58
【问题描述】:

我有 nginx/1.4.2 + Apache,我想用 nginx 缓存所有请求。此位置规则为 .php 创建缓存文件,但不为 .html 创建缓存文件:

    location ~* \.(html|php)$ {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host my-host-name.com;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;

            add_header cache "html";

            proxy_cache default;
            proxy_cache_min_uses 1;
            proxy_cache_valid  1d;
            proxy_cache_key "$host|$request_uri";
            proxy_hide_header "Set-Cookie";
            proxy_ignore_headers "Cache-Control" "Expires";
    }

响应中添加了标头“缓存”,因此位置有效。

我尝试过使用“location /” - 对存储在缓存中的带有 .php 扩展名(并且没有任何扩展名)的脚本的请求。对于扩展名为 .html 的脚本,nginx 不会创建缓存。

我找不到 nginx 忽略带有 .html 扩展名的脚本的原因。将脚本重命名为 .php - 这不是办法。我有 CMS,它为带有 .html 的页面提供人类可读的 URL,Google 索引中有数千个页面,现在重命名会导致网站重新索引。

【问题讨论】:

    标签: php apache caching nginx


    【解决方案1】:

    可能是因为您的 CMS 返回 Set-Cookie 标头。

    【讨论】:

    • 是的!因为在配置中我有: proxy_hide_header "Set-Cookie";所以,在 nginx 之后,我们看不到“Set-Cookie”标头是否存在。如果 CMS 尝试发送 cookie,nginx 将禁用缓存
    猜你喜欢
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    相关资源
    最近更新 更多