1. 程式人生 > >Yii2 負載均衡找不到JS,CSS

Yii2 負載均衡找不到JS,CSS

創建 div 求一個 字符串 思路 fun turn component timestamp

  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目錄同步

  • 使用 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/', ], ] ],

    easydo.work

Yii2 負載均衡找不到JS,CSS