vcomedia/vco-zf-mediapath

Zend Framework 2 basePath view helper 包装器。

dev-master 2016-08-18 03:32 UTC

This package is not auto-updated.

Last update: 2024-09-28 20:03:27 UTC


README

ZF2 Cachebuster 是一个缓存清除模块,其设计灵感来源于 https://github.com/gordonknoppe/magento-cachebuster。它通过使用HTML5模板社区中概述的最佳实践,使用最佳实践自动清除HTTP缓存(如浏览器缓存、CDN、Varnish等)中的静态资源。

请参阅 "基于文件名的缓存清除" 部分: https://github.com/h5bp/server-configs-apache/blob/2.14.0/dist/.htaccess#L968

概览

该模块通过自动修改Magento为静态文件创建的URI,通过添加文件的时间戳到文件名来实现缓存清除。

示例用法

  • 当使用Cloudfront CDN时,自动使缓存失效
    • Amazon的Cloudfront CDN可以配置为使用源服务器,但根据其性质,直到缓存时间到期或您使用他们的API发送无效化请求,它不会刷新您的更新文件。
  • 不再有浏览器缓存问题(例如:他们:“我请求的那个CSS变化在哪里?” 你:“哦,你刷新了吗?”)
    • 添加远期过期头部,这有助于减少对服务器的请求次数,即使没有CDN,您也可能已经体验过浏览器缓存导致浪费时间的情况,而实际上并不是问题。

安装

Composer

  • 安装 Composer
  • 使用Composer将模块安装到您的应用程序的vendor目录中。在您的 composer.json 中添加以下行。
{
   "require": {
       "vcomedia/vco-zf-mediapath": "dev-master"
   }
}
  • 执行 composer update
  • 在您的 ZF2 application.config.php 文件中启用模块。
return array(
    'modules' => array(
        'VcoZfMediaPath'
    )
);
  • vco-zf-logger/config/module.vco-zf-mediapath.local.php.dist 文件复制并粘贴到您的 config/autoload 文件夹中,并使用您的配置设置进行自定义。确保从您的文件中删除 .dist。您的 module.vco-zf-mediapath.local.php 可能看起来如下
<?php
/**
* VcoZfMediaPath - Zend Framework 2 basePath view helper wrapper.
*
* @category Module
* @package  VcoZfMediaPath
* @author   Vahag Dudukgian (valeeum)
* @license  https://open-source.org.cn/licenses/MIT The MIT License (MIT)
* @link     http://github.com/vcomedia/vco-zf-mediapath/
*/

namespace VcoZfMediaPath;

return array(
  'VcoZfMediaPath' => array(
      'docRoot' => '/public',
      'cdnOptions' => array(
          'enabled' => true,
          'defaultDomain' => array(
              'http' => 'http://cdn.domain.com',
              'https' => 'http://cdn.domain.com'
          )
      ),
      'cacheBusterOptions' => array(
          'enabled' => true,
          'basePaths' => array(
              '/skin/',
              '/js/',
              '/scripts/',
              '/css/',
              '/stylesheets/',
              '/media/',
              '/uploads/',
              '/images/',
              '/img/',
              '/imgs/',
              '/cache/',
              '/fonts/'
          ),
         'extensions' => array(
              'js',
              'css',
              'jpg',
              'jpeg',
              'gif',
              'png',
              'ttf',
              'woff',
              'pdf'
          )            
      )
  )
);

注意:由顶级 'VcoZfLogger' 键返回的配置数组直接传递给 Log 类构造函数,除了邮件传输和mongo凭证注入都是可选的。

mod_rewrite 配置

当使用此模块时,需要启用以下mod_rewrite规则,可能通过.htaccess文件或虚拟主机定义来实现。

<IfModule mod_rewrite.c>

############################################
## rewrite files for magento cachebuster

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpeg|jpg|gif)$ $1.$3 [L]

</IfModule>

nginx 配置

对于nginx,您需要在您的站点定义中添加类似以下的规则。

location ~* (.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$ {
    try_files $uri $1.$3;
}

使用AWS Cloudfront时考虑重复内容限制和限制到特定静态文件夹(此方法适用于任何CDN)

  1. 创建2个源
    • 一个源将是 "domain.com"
    • 另一个源将是一个自定义错误页面,例如 "domain.com/403.html" 或您想要处理的任何方式。
  2. 为您拥有的每个静态文件文件夹创建缓存行为。例如
    • 对于 "/css",您将创建一个缓存行为路径模式 "css/*"
    • 对于 "/js",您将创建一个缓存行为路径模式 "js/*"
    • 等等。
    • 对于这些缓存行为中的每一个,您都希望确保指定的源是 "domain.com"。
    • 这样,对 "http://cdn.domain.com/css/" 等的任何请求将类似于对 "http://domain.com/css/" 的请求
  3. 然后,对于默认缓存行为(*),您可以将它指向您创建的第二个来源。按照第1步中的示例,该来源将是 "domain.com/403.html"。

所以,本质上,上述操作的方式是:任何对 http://cdn.domain.com/css/,/js/ 等;的请求都将适当指向您的来源。如果他们试图访问 "http://cdn.domain.com/notspecified/",这将仅匹配默认缓存行为(*),然后会将他们指向您创建的403页面。这样,应该确保任何爬取 cdn.domain.com 的内容都只能看到您的静态内容,而看不到其他内容,除非在您的缓存行为路径模式中指定。

这至少会将重复内容问题限制在静态文件上。

许可

Apache License,版本 2.0 许可