Yii2 負載均衡找不到JS,CSS
阿新 • • 發佈:2018-05-15
創建 div 求一個 字符串 思路 fun turn component timestamp
- 在部署項目的時候,用了2臺服務器.請求的時候用了負載均衡,導致 YII2 的靜態文件(js,css...)報 404 ,原因是: 請求一個頁面時 A服務器 去處理,但是靜態資源缺請求到了 B服務器 ,B服務器的 YII2資源管理器 還沒有在 web\assets 生成目錄和靜態文件.
- 仔細看了下 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/'
easydo.work
Yii2 負載均衡找不到JS,CSS