nginx配置用于到期指定

时间:2018-02-08 09:16:56

标签: .htaccess caching nginx browser

我正在尝试改进我的pagespeed。我已经安装了nginx并将我的网站更改为http2。但是在gtmetrix性能报告中我的css,png和js文件没有到期日期。 Leverage浏览器缓存建议中的(未指定过期)。我想我已经设定了所有可能的方法来尝试不同的变种。

如果他们是我的nginx指令和htaccess文件的另一项改进,请随时发布。

Plesk中的

nginx成瘾指令

autocomplete.js

htaccess的文件

gzip on;
gzip_vary on;
gzip_min_length 1240;
gzip_proxied    expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\\.(?!.*SV1)";
gzip_proxied any;
gzip_types text/plain text/css text/javascript application/javascript application/x-javascript application/json text/xml application/xml application/xml+rss image/x-icon image/bmp image/svg+xml;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 1y;
    log_not_found off;
}

1 个答案:

答案 0 :(得分:0)

您需要检查并设置Etag标头以优化页面加载。

当我们设置浏览器缓存时,我们应该保留一个主要规则: "如果文件曾被浏览器加载过, 如果此文件没有更改,浏览器不应再次加载此文件。"浏览器应该从缓存中获取此文件。 在每次重新加载页面时,浏览器应该检查,哪个文件在服务器上被修改,哪个没有。 出于HTTP协议的目的,我们有 ETag 标头,浏览器在第一个文件请求中从服务器接收 并且在下一个请求中,浏览器将发送该标头的值作为标头的值If-None-Match或If-non-modified-since。 浏览器和服务器之间的这种通信将如下所示:

First request:

    GET /file.css HTTP/1.1
    Host: example.com\r\n\r\n

First response:

    HTTP/1.1 200 OK
    Content-Type: text/css; charset=UTF-8
    Cache-Control: public, must-revalidate
    ETag:W/"51f2d-dEW1Z5fvR5lLvYGJeS4DTZdaxAs"

    --There is content of file--

Second request:

    GET /file.css HTTP/1.1
    If-None-Match:W/"51f2d-dEW1Z5fvR5lLvYGJeS4DTZdaxAs"
    Host: example.com\r\n\r\n

Second response:

HTTP/1.1 304 Not Modified

--There is no content--

请注意:

ETag的:W /" 51f2d-dEW1Z5fvR5lLvYGJeS4DTZdaxAs"在第一次回复中

如果无 - 匹配度:W /" 51f2d-dEW1Z5fvR5lLvYGJeS4DTZdaxAs"

第二次请求中的

在这种情况下,当我们收到" 304 Not Modified"浏览器将从缓存中提取此文件 这个文件将有无尽的过期。如果文件将被更改,则Etag值将被更改 浏览器将从服务器重新加载此文件并更新其缓存。 即使你使用php或其他东西进行动态内容渲染,nginx也会计算Etag的值 在呈现内容并在向浏览器发送响应之前检查之后;

对于加载优化,您需要在服务器中设置Etag标头。 这个方法:

ExpiresByType image/jpg "access plus 14 days"

文件缓存不正确。 您只能将其用于主html请求。 因为Expiration标头对谷歌等搜索引擎很有用。 它告诉他们何时需要重新索引您的页面。 如何设置Etag,您可以看到here