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
<span>public</span> <span>function</span> getBaseUrl(<span>$type</span> = self::URL_TYPE_LINK, <span>$secure</span> = <span>null</span><span>) { </span><span>$cacheKey</span> = <span>$type</span> . '/' . (<span>is_null</span>(<span>$secure</span>) ? 'null' : (<span>$secure</span> ? 'true' : 'false'<span>)); </span><span>if</span> (!<span>isset</span>(<span>$this</span>->_baseUrlCache[<span>$cacheKey</span><span>])) { </span><span>switch</span> (<span>$type</span><span>) { </span><span>case</span> self::URL_TYPE_WEB: <span>$secure</span> = <span>is_null</span>(<span>$secure</span>) ? <span>$this</span>->isCurrentlySecure() : (bool)<span>$secure</span><span>; </span><span>$url</span> = <span>$this</span>->getConfig('web/' . (<span>$secure</span> ? 'secure' : 'unsecure') . '/base_url'<span>); </span><span>break</span><span>; </span><span>case</span> self::URL_TYPE_LINK: <span>$secure</span> = (bool) <span>$secure</span><span>; </span><span>$url</span> = <span>$this</span>->getConfig('web/' . (<span>$secure</span> ? 'secure' : 'unsecure') . '/base_link_url'<span>); </span><span>$url</span> = <span>$this</span>->_updatePathUseRewrites(<span>$url</span><span>); </span><span>$url</span> = <span>$this</span>->_updatePathUseStoreView(<span>$url</span><span>); </span><span>break</span><span>; </span><span>case</span> self::URL_TYPE_DIRECT_LINK: <span>$secure</span> = (bool) <span>$secure</span><span>; </span><span>$url</span> = <span>$this</span>->getConfig('web/' . (<span>$secure</span> ? 'secure' : 'unsecure') . '/base_link_url'<span>); </span><span>$url</span> = <span>$this</span>->_updatePathUseRewrites(<span>$url</span><span>); </span><span>break</span><span>; </span><span>case</span> self::URL_TYPE_SKIN: <span>case</span> self::URL_TYPE_JS: <span>$secure</span> = <span>is_null</span>(<span>$secure</span>) ? <span>$this</span>->isCurrentlySecure() : (bool) <span>$secure</span><span>; </span><span>$url</span> = <span>$this</span>->getConfig('web/' . (<span>$secure</span> ? 'secure' : 'unsecure') . '/base_' . <span>$type</span> . '_url'<span>); </span><span>break</span><span>; </span><span>case</span> self::URL_TYPE_MEDIA: <span>$url</span> = <span>$this</span>->_updateMediaPathUseRewrites(<span>$secure</span><span>); </span><span>break</span><span>; </span><span>default</span>: <span>throw</span> Mage::<span>exception</span>('Mage_Core', Mage::helper('core')->__('Invalid base url type'<span>)); } </span><span>if</span> (<span>false</span> !== <span>strpos</span>(<span>$url</span>, '{{base_url}}'<span>)) { </span><span>$baseUrl</span> = Mage::getConfig()->substDistroServerVars('{{base_url}}'<span>); </span><span>$url</span> = <span>str_replace</span>('{{base_url}}', <span>$baseUrl</span>, <span>$url</span><span>); } </span><span>$this</span>->_baseUrlCache[<span>$cacheKey</span>] = <span>rtrim</span>(<span>$url</span>, '/') . '/'<span>; } </span><span>return</span> <span>$this</span>->_baseUrlCache[<span>$cacheKey</span><span>]; }</span>
URL_TYPE_MEDIA的获取方式更复杂些 我们也看看写了什么
<span>protected</span> <span>function</span> _updateMediaPathUseRewrites(<span>$secure</span> = <span>null</span>, <span>$type</span> = self::<span>URL_TYPE_MEDIA) { </span><span>$secure</span> = <span>is_null</span>(<span>$secure</span>) ? <span>$this</span>->isCurrentlySecure() : (bool) <span>$secure</span><span>; </span><span>$secureStringFlag</span> = <span>$secure</span> ? 'secure' : 'unsecure'<span>; </span><span>$url</span> = <span>$this</span>->getConfig('web/' . <span>$secureStringFlag</span> . '/base_' . <span>$type</span> . '_url'<span>); </span><span>if</span> (!<span>$this</span>->getConfig(self::<span>XML_PATH_USE_REWRITES) </span>&& Mage::helper('core/file_storage_database')-><span>checkDbUsage() ) { </span><span>$urlStart</span> = <span>$this</span>->getConfig('web/' . <span>$secureStringFlag</span> . '/base_url'<span>); </span><span>$url</span> = <span>str_replace</span>(<span>$urlStart</span>, <span>$urlStart</span> . self::MEDIA_REWRITE_SCRIPT, <span>$url</span><span>); } </span><span>return</span> <span>$url</span><span>; }</span>
我们可以发现所有$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里加两个域名用来测试
<span>127.0</span>.<span>0.1</span><span> magento.yourdomain.com </span><span>127.0</span>.<span>0.1</span> 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 <span>'</span><span>https://mage-cdn.yourdomain.com</span><span>'</span> has been blocked from loading by Cross-Origin Resource Sharing policy: No <span>'</span><span>Access-Control-Allow-Origin</span><span>'</span> header is present on the requested resource. Origin <span>'</span><span>https://magento.yourdomain.com</span><span>'</span> is therefore <span>not</span> 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 这下可以搞定了

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Model bahasa berskala besar (LLM) telah menunjukkan keupayaan yang menarik dalam banyak tugas penting, termasuk pemahaman bahasa semula jadi, penjanaan bahasa dan penaakulan yang kompleks, dan telah memberi kesan yang mendalam kepada masyarakat. Walau bagaimanapun, keupayaan cemerlang ini memerlukan sumber latihan yang ketara (ditunjukkan di sebelah kiri) dan masa inferens yang panjang (ditunjukkan di sebelah kanan). Oleh itu, penyelidik perlu membangunkan cara teknikal yang berkesan untuk menyelesaikan masalah kecekapan mereka. Di samping itu, seperti yang dapat dilihat dari sebelah kanan rajah, beberapa LLM (Model Bahasa) yang cekap seperti Mistral-7B telah berjaya digunakan dalam reka bentuk dan penggunaan LLM. LLM yang cekap ini boleh mengurangkan memori inferens dengan ketara sambil mengekalkan ketepatan yang serupa dengan LLaMA1-33B

Urutan talian sambungan SPDIFOUT pada papan induk Baru-baru ini, saya menghadapi masalah mengenai urutan pendawaian wayar. Saya menyemak dalam talian Beberapa maklumat mengatakan bahawa 1, 2, dan 4 sepadan dengan keluar, +5V, dan tanah manakala maklumat lain mengatakan bahawa 1, 2, dan 4 sepadan dengan keluar, tanah dan +5V. Cara terbaik ialah menyemak manual papan induk anda Jika anda tidak menemui manual, anda boleh menggunakan multimeter untuk mengukurnya. Cari tanah dahulu, kemudian anda boleh menentukan susunan pendawaian yang lain. Cara menyambung pendawaian VDG papan induk Apabila menyambungkan pendawaian VDG papan induk, anda perlu palamkan satu hujung kabel VGA ke antara muka VGA monitor dan hujung satu lagi ke antara muka VGA kad grafik komputer. Sila berhati-hati untuk tidak memasukkannya ke dalam port VGA motherboard. Setelah disambungkan, anda boleh

Akan ada banyak sumber dalam cakera rangkaian 115, jadi bagaimana untuk mencari sumber? Pengguna boleh mencari sumber yang mereka perlukan dalam perisian, kemudian masukkan antara muka muat turun, dan kemudian memilih untuk menyimpan ke cakera rangkaian. Pengenalan kepada kaedah mencari sumber pada cakera rangkaian 115 ini boleh memberitahu anda kandungan tertentu Berikut ialah pengenalan terperinci, datang dan lihat. Bagaimana untuk mencari sumber pada cakera rangkaian 115 Jawapan: Cari kandungan dalam perisian, dan kemudian klik untuk menyimpan ke cakera rangkaian. Pengenalan terperinci: 1. Mula-mula masukkan sumber yang anda inginkan dalam apl. 2. Kemudian klik pautan kata kunci yang muncul. 3. Kemudian masukkan antara muka muat turun. 4. Klik Simpan ke cakera rangkaian di dalam.

Masalah penilaian kesan pengelompokan dalam algoritma pengelompokan memerlukan contoh kod khusus Pengelompokan ialah kaedah pembelajaran tanpa pengawasan yang mengelompokkan sampel yang serupa ke dalam satu kategori dengan mengelompokkan data. Dalam algoritma pengelompokan, cara menilai kesan pengelompokan adalah isu penting. Artikel ini akan memperkenalkan beberapa penunjuk penilaian kesan pengelompokan yang biasa digunakan dan memberikan contoh kod yang sepadan. 1. Indeks penilaian kesan pengelompokan Pekali Siluet Pekali siluet menilai kesan pengelompokan dengan mengira kehampiran sampel dan tahap pemisahan daripada kelompok lain.

Tugas penjanaan imej-ke-video (I2V) merupakan satu cabaran dalam bidang penglihatan komputer yang bertujuan untuk menukar imej statik kepada video dinamik. Kesukaran tugas ini adalah untuk mengekstrak dan menjana maklumat dinamik dalam dimensi temporal daripada imej tunggal sambil mengekalkan keaslian dan keselarasan visual kandungan imej. Kaedah I2V sedia ada selalunya memerlukan seni bina model yang kompleks dan sejumlah besar data latihan untuk mencapai matlamat ini. Baru-baru ini, hasil penyelidikan baharu "I2V-Adapter: AGeneralImage-to-VideoAdapter for VideoDiffusionModels" yang diketuai oleh Kuaishou telah dikeluarkan. Kajian ini memperkenalkan kaedah penukaran imej-ke-video yang inovatif dan mencadangkan modul penyesuai ringan, i.e.

Han Xiaoquan ialah perisian yang boleh menonton banyak drama Korea, jadi kenapa tiba-tiba tiada sumber? Perisian ini mungkin tidak mempunyai sumber kerana masalah rangkaian, masalah versi atau isu hak cipta. Artikel mengenai sebab Han Xiaoquan tiba-tiba tidak mempunyai sumber boleh memberitahu anda kandungan khusus Berikut ialah pengenalan terperinci, datang dan lihat. Mengapa tiba-tiba Han Xiaoquan tidak mempunyai sumber Jawapan: Disebabkan masalah rangkaian, masalah versi dan isu hak cipta, pengenalan terperinci: 1. Penyelesaian kepada masalah rangkaian: Anda boleh memilih rangkaian lain, dan kemudian log masuk ke perisian sekali lagi untuk mencuba? . 2. Penyelesaian kepada masalah versi: Pengguna boleh memuat turun versi terkini perisian ini daripada laman web rasmi. 3. Penyelesaian kepada isu hak cipta: Beberapa drama Korea dialih keluar daripada rak kerana isu hak cipta Anda boleh memilih drama Korea lain untuk ditonton.

Dikenali dengan prestasi yang berkuasa dan ciri serba boleh, iPhone tidak terlepas daripada cegukan atau kesukaran teknikal sekali-sekala, ciri biasa di kalangan peranti elektronik yang kompleks. Mengalami masalah iPhone boleh mengecewakan, tetapi biasanya penggera tidak diperlukan. Dalam panduan komprehensif ini, kami menyasarkan untuk menyahmistifikasi beberapa cabaran yang paling biasa dihadapi yang berkaitan dengan penggunaan iPhone. Pendekatan langkah demi langkah kami direka untuk membantu anda menyelesaikan isu lazim ini, menyediakan penyelesaian praktikal dan petua penyelesaian masalah untuk mengembalikan peralatan anda dalam keadaan berfungsi terbaik. Sama ada anda menghadapi masalah atau isu yang lebih kompleks, artikel ini boleh membantu anda menyelesaikannya dengan berkesan. Petua Penyelesaian Masalah Umum Sebelum menyelidiki langkah penyelesaian masalah khusus, berikut adalah beberapa yang berguna

Untuk menyelesaikan masalah yang jQuery.val() tidak boleh digunakan, contoh kod khusus diperlukan Untuk pembangun bahagian hadapan, menggunakan jQuery ialah salah satu operasi biasa. Antaranya, menggunakan kaedah .val() untuk mendapatkan atau menetapkan nilai elemen borang adalah operasi yang sangat biasa. Walau bagaimanapun, dalam beberapa kes tertentu, masalah tidak dapat menggunakan kaedah .val() mungkin timbul. Artikel ini akan memperkenalkan beberapa situasi dan penyelesaian biasa, serta memberikan contoh kod khusus. Penerangan Masalah Apabila menggunakan jQuery untuk membangunkan halaman hadapan, kadangkala anda akan menghadapi
