端くれプログラマの備忘録 Laravel [Laravel] メンテナンスモード

[Laravel] メンテナンスモード

Laravelにはメンテナンスモードがある。

メンテナンスモードでは

  • カスタムビューを表示する
  • ステータス503(Service unavailable)を返す

メンテナンスモードに移行するには

$ php artisan down

メンテナンスモードから復帰するには

$ php artisan up

メンテナンスモード中でも特定IPからのアクセスを許可するには

一般からのアクセスは拒絶するのだけど、身内のアクセスだけは許したい場合がある。例えばメンテナンスが完了して公開前にテスターにだけアクセスを許す場合など。

そういった制御はHTTPをフィルタリングすのが役割のミドルウェアで行うのが定石か。サンプルを公開してくれているサイトがあったので参考にさせてもらう。

Laravel 5 メンテナンスモード IP制限
http://www.ajisaba.net/php/laravel5/maintenance.html

以下ざっと実装手順。

許可サイトのIPアドレスを.envに記述する

MAINTENANCE_IP=192.168.1.10,192.168.1.11

ミドルウェアを実装する

class AllowAccessInMaintenanceMode
{
    protected $app;

    public function __construct(Application $app)
    {
        $this->app = $app;
    }

    public function handle($request, Closure $next)
    {
        if ($this->app->isDownForMaintenance()) {
            $ip = $request->getClientIp();
            $allowIp = explode(',', env('MAINTENANCE_IP'));
            if (!is_array($allowIp) || !in_array($ip, $allowIp)) {
                throw new HttpException(503);
            }
        }
        return $next($request);
    }
}