您好,欢迎访问一九零五行业门户网

Magento资源问题上CDN方案研究,magento资源cdn方案_PHP教程

magento资源问题上cdn方案研究,magento资源cdn方案  通过对magento的了解,发现magento的资源文件主要分布在media、js、skin三个文件夹里,media文件夹主要包括了系统自带编辑器wysiwyg editor 所有编辑器涉及到的资源(static blocks、pages、product intro、product images)以及magento自主生成的媒体资源  (包含了我们允许用户上传文件的文件夹);skin文件夹主要是模板提供的样式、图片、js资源(一般我们对模板再次改造时会改到这个文件夹里的资源);js文件夹包括magento官方的prototype、varien、scriptaculous、mage等js库以及附属资源(一般我们不会去动这个文件夹),这三个文件夹所包含的全部都是静态资源(图片、js、css、字体、文档等) 也就是我们可以cdn的文件
  通过对magento源码的观察,网站公开方法getbaseurl  at  app/core/mage/core/model/store.php
public function getbaseurl($type = self::url_type_link, $secure = null){ $cachekey = $type . '/' . (is_null($secure) ? 'null' : ($secure ? 'true' : 'false')); if (!isset($this->_baseurlcache[$cachekey])) { switch ($type) { case self::url_type_web: $secure = is_null($secure) ? $this->iscurrentlysecure() : (bool)$secure; $url = $this->getconfig('web/' . ($secure ? 'secure' : 'unsecure') . '/base_url'); break; case self::url_type_link: $secure = (bool) $secure; $url = $this->getconfig('web/' . ($secure ? 'secure' : 'unsecure') . '/base_link_url'); $url = $this->_updatepathuserewrites($url); $url = $this->_updatepathusestoreview($url); break; case self::url_type_direct_link: $secure = (bool) $secure; $url = $this->getconfig('web/' . ($secure ? 'secure' : 'unsecure') . '/base_link_url'); $url = $this->_updatepathuserewrites($url); break; case self::url_type_skin: case self::url_type_js: $secure = is_null($secure) ? $this->iscurrentlysecure() : (bool) $secure; $url = $this->getconfig('web/' . ($secure ? 'secure' : 'unsecure') . '/base_' . $type . '_url'); break; case self::url_type_media: $url = $this->_updatemediapathuserewrites($secure); break; default: throw mage::exception('mage_core', mage::helper('core')->__('invalid base url type')); } if (false !== strpos($url, '{{base_url}}')) { $baseurl = mage::getconfig()->substdistroservervars('{{base_url}}'); $url = str_replace('{{base_url}}', $baseurl, $url); } $this->_baseurlcache[$cachekey] = rtrim($url, '/') . '/'; } return $this->_baseurlcache[$cachekey];}
url_type_media的获取方式更复杂些 我们也看看写了什么
protected function _updatemediapathuserewrites($secure = null, $type = self::url_type_media){ $secure = is_null($secure) ? $this->iscurrentlysecure() : (bool) $secure; $securestringflag = $secure ? 'secure' : 'unsecure'; $url = $this->getconfig('web/' . $securestringflag . '/base_' . $type . '_url'); if (!$this->getconfig(self::xml_path_use_rewrites) && mage::helper('core/file_storage_database')->checkdbusage() ) { $urlstart = $this->getconfig('web/' . $securestringflag . '/base_url'); $url = str_replace($urlstart, $urlstart . self::media_rewrite_script, $url); } return $url;}
我们可以发现所有$type 类型的 始终会从 getconfig(string configpath) 中获得,所获得保存数据库 在后台 configuration -> general web -> unsecure & secure 里可以配置修改。
假设把magento整站当做cdn源服务器,再把base_media_url、base_skin_url、base_js_url的值改成cdn的地址,是不是就对magento的资源进行了cdn处理了呢,于是我就先把本地的机器装上了magento来测试一番(俗话说实践是检验真理的唯一方法),由于cdn需要域名解析,我们暂时不理会也不去搞cdn,但是我们可以用重定向一个新域名来代表这个cdn,比如 hosts里加两个域名用来测试
127.0.0.1 magento.yourdomain.com 127.0.0.1 mage-cdn.yourdomain.com
nginx里把原来magento.yourdomain.com的配置复制一份并删除php解析那一段保证安全。顺便在资源那加入尽可能多的资源类型(以后不够还可以再加)
重启nginx,然后登陆magento后台 把 base_media_url、base_skin_url、base_js_url 中原来的 {{base_unsecure_url}} 都改成 http://mage-cdn.yourdomain.com/ 、{{base_secure_url}} 都改成 https://mage-cdn.yourdomain.com/ 然后保存设置 重新刷下magento缓存 ok 大功告成。
打开http://magento.yourdomain.com/ 试试,诶 假设你用了别的模板,里面加了很多字体,你可能会看到有跨域访问的错误提示:
font from origin 'https://mage-cdn.yourdomain.com' has been blocked from loading by cross-origin resource sharing policy: no 'access-control-allow-origin' header is present on the requested resource. origin 'https://magento.yourdomain.com' is therefore not allowed access.
他告诉你magento的站点想访问mage-cdn的一些资源但是由于没有access-control-allow-origin 头,所以我们在nginx配置mage-cdn站点里资源文件访问时统一加上 add_header access-control-allow-origin https://magento.yourdomain.com. 为什么不用*呢,假如你很大方的想别的网站也能跨域访问你的资源那你就使用*吧,我是建议那里用的绑哪里,呵呵
然后我们在打开magento站点 进行各种测试 注册 登陆 下单 上传 后台各种编辑 ok 这次我们真的大功告成了。
加下来就是部署cdn了,登陆cdn服务商,直接将源站点设置为你的 magento.yourdomain.com  一般cdn都提供cname服务,那么你大方的解析一个cdn.yourdomain.com cname给 cdn服务商提供给你的地址 abcd.xxxx.com ,一般cdn服务商也同样提供headers 的添加 你可以为这个cdn添加需要headers,就是我们需要的跨域请求。再就是配置magento 然后blablabla 最后你想办法让cdn服务商用你的crt证书。ok 这下可以搞定了
http://www.bkjia.com/phpjc/1102846.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/1102846.htmltecharticlemagento资源问题上cdn方案研究,magento资源cdn方案 通过对magento的了解,发现magento的资源文件主要分布在media、js、skin三个文件夹里,media文件...
其它类似信息

推荐信息