微信公衆號:網管小賈
個人博客:www.sysadm.cc
不得不承認,現實中不管你的系統是多麼的簡單還多麼的複雜,總是逃不脫更新和維護這一大問題。
但如果你使用過Laravel來建立站點系統的話,肯定多少會瞭解到它的維護模式還算是方便易上手。
瞧!兩條命令搞定一切。
php artisan down
和 php artisan up
,一個啓用,一個關閉。
超級簡單是不是?
再複雜一些,也不過是加了幾個選項,如:
message
顯示或記錄自定義消息
php artisan down --message="Upgrading Database"
allow
維護模式中允許特定的網絡訪問
php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16
簡單易懂吧?可惜並不輕鬆愉快!
爲什麼這麼說尼?
原因很扎心,如果遇到頻繁需要維護的場景,每次都要手寫一番消息和特定許可IP,的確感覺有些吃不消啊!
那怎麼辦?
還能怎麼辦,盤它唄!
微信公衆號:網管小賈
個人博客:www.sysadm.cc
通過一頓猛操作,網上蒐集到的信息這麼那麼一綜合,有了!
基本思路是,修改中間件 CheckForMaintenanceMode.php
,通過數據庫讀取出自定義消息和特定IP地址。
如果符合特定允許條件,則正常返回請求,否則顯示出自定義維護消息。
1、找到中間件 CheckForMaintenanceMode.php
的handle方法。
2、添加以下代碼,用於判斷是否開啓了維護模式(實際是判斷 storage/framework/
下是否存在 down
文件)
if ($this->app->isDownForMaintenance()) {}
3、允許IP地址的判斷代碼,這個最好寫在判斷down文件內容的前面。
// 讀取維護模式所需的消息及特定IP地址
$config = Config::where('cfg_name', 'SITE_MAINTENANCE_ALLOWED')
->orWhere('cfg_name', 'SITE_MAINTENANCE_MESSAGE')
->pluck('cfg_value', 'cfg_name')->toArray();
// 允許的IP地址,由字符串轉成數組形式
// 如:'127.0.0.1', '10.10.10.10' 轉換爲 ['127.0.0.1', '10.10.10.10']
$allowed_ip = explode(',', $config['SITE_MAINTENANCE_ALLOWED']);
// 如果在允許範圍內,則正常返回請求
if (in_array($request->getClientIp(), $allowed_ip)) {
return $next($request);
}
顯示自定義維護消息,寫在down文件判斷的後面比較好。
if($request->ajax()){
// 如果是ajax請求,則返回相應信息
return response()->json();
} else {
// 如果有系統維護的自定義消息內容,則顯示之
if (!empty($config['SITE_MAINTENANCE_MESSAGE'])) {
$data['message'] = $config['SITE_MAINTENANCE_MESSAGE'];
}
// 拋出503
abort(503, $data['message'] == null || $data['message'] == '' ? '很抱歉,系統維護中! 請稍後再試!' : $data['message']);
}
總結一下,大概按照以下流程。
先判斷自定義的IP,再判斷down文件的allow,最後顯示自定義維護消息。
實際使用中就很方便啦!
每次需要維護時,只要事先編輯好維護的提示消息和可以訪問的IP地址,然後直接打上 php artisan down
開啓維護模式,完事後再 php artisan up
關閉維護恢復正常訪問就歐了。真香!
當然,數據庫的配置項你應該會創建的吧,官方手冊裏有寫哦。
還是不會?那你可以留言給我。
複製代碼太麻煩?這有下載鏈接,拿去。
CheckForMaintenanceMode.php 源碼下載 密碼:7t33
公衆號:網管小賈
微信公衆號:網管小賈
個人博客:www.sysadm.cc