Magento资源问题上CDN方案研究,magento资源cdn方案_PHP教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Magento资源问题上CDN方案研究,magento资源cdn方案_PHP教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5173字,纯文字阅读大概需要8分钟。
内容图文
![Magento资源问题上CDN方案研究,magento资源cdn方案_PHP教程](/upload/InfoBanner/zyjiaocheng/190/5691cb1aeaea4145a4bbad67dff543cf.jpg)
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文件...
内容总结
以上是互联网集市为您收集整理的Magento资源问题上CDN方案研究,magento资源cdn方案_PHP教程全部内容,希望文章能够帮你解决Magento资源问题上CDN方案研究,magento资源cdn方案_PHP教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。