Yii2 負載均衡找不到JS,CSS

  1. 在部署項目的時候,用了2臺服務器.請求的時候用了負載均衡,致使 YII2 的靜態文件(js,css...)報 404 ,緣由是: 請求一個頁面時 A服務器 去處理,可是靜態資源缺請求到了 B服務器 ,B服務器的 YII2資源管理器 尚未在 web\assets 生成目錄和靜態文件.
  2. 仔細看了下 YII2 的靜態資源管理代碼:yii\web\AssetManager(定義資源文件包),`yii\web\AssetBundle(資源包之間的文件依賴,加載和建立).有如下幾個解決思路:
  • 更改 生成緩存目錄的命名方式,保持一致的文件夾,缺點就是訪問其中一臺服務器時,尚未生成 靜態文件目錄.需本身訪問,直到 2臺服務器 有相同的目錄便可.
//配置 main.php components數組下assetManager
'assetManager'=>[
    //緩存相同的文件到相同的一個文件夾
    'hashCallback'=>function($path){
        return hash('md4', $path);
    },
    //添加文件時間戳
    'appendTimestamp' => true,
],
  • 同步緩存目錄,這個相對來講是很簡單.就是保持2個服務器的有相同的一份靜態資源,手動同步就是 FTP 上傳,自動同步就是2個服務器之間相互請求保持一致便可.有工具能夠使用:Linux rsync目錄同步php

  • 使用 CDN ,在配置CDN時要把 'sourcePath'賦值爲 NULL,而不是空字符串.每個資源包的CDN地址能夠去CDN平臺找,也能夠本身上傳到雲空間去訪問.我的推薦這種方式.
'assetManager'=>[
    'bundles'=>[
        //jquery.js
        'yii\web\JqueryAsset' => [
            'sourcePath' => null,
            'baseUrl' => 'https://cdn.bootcss.com/jquery/2.2.4/',
        ],
        //Yii.js
        'yii\web\YiiAsset' => [
            'sourcePath' => null,
            'baseUrl' => 'http://p8mo8fh1z.bkt.clouddn.com/',
        ],
        //bootstrap.css
        'yii\bootstrap\BootstrapAsset' => [
            'sourcePath' => null,
            'baseUrl' => 'https://cdn.bootcss.com/bootstrap/3.3.7/',
        ],
        //bootstrap.js
        'yii\bootstrap\BootstrapPluginAsset' => [
            'sourcePath' => null,
            'baseUrl' => 'https://cdn.bootcss.com/bootstrap/3.3.7/',
        ],
    ]
],

blog.easydo.workcss

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息