본문 바로가기
프로그래밍/Web

Laravel 점검 모드에서 AWS ELB health 검사

by 사악신 2017. 4. 25.


\App\Http\Middleware\CheckForMaintenanceMode.php 를 작성합니다.


<?php


namespace App\Http\Middleware;


use Closure;

use Illuminate\Contracts\Foundation\Application;

use Symfony\Component\HttpKernel\Exception\HttpException;


class CheckForMaintenanceMode

{

    /**

     * The application implementation.

     *

     * @var \Illuminate\Contracts\Foundation\Application

     */

    protected $app;


    /**

     * Create a new middleware instance.

     *

     * @param  \Illuminate\Contracts\Foundation\Application  $app

     * @return void

     */

    public function __construct(Application $app)

    {

        $this->app = $app;

    }


    /**

     * Handle an incoming request.

     *

     * @param  \Illuminate\Http\Request  $request

     * @param  \Closure  $next

     * @return mixed

     *

     * @throws \Symfony\Component\HttpKernel\Exception\HttpException

     */

    public function handle($request, Closure $next)

    {

        if ($this->app->isDownForMaintenance()) {

            throw new HttpException(200);

        }


        return $next($request);

    }

}



기존의 503 에러 처리를 할 경우, 아마존 ELB health 검사에서 오류로 처리되어 서비스 장애로 인식됩니다. 편법이긴한데 이를 정상 코드로 예외를 발생시켜 우회합니다.(마찬가지로 503.blade.php 대신 resources\views\errors\200.blade.php 의 서비스 점검 페이지를 추가 작성합니다.)


\App\Http\Kernel\Kernel.php 에서 해당 미들웨어로 교체합니다.


<?php


namespace App\Http;


use Illuminate\Foundation\Http\Kernel as HttpKernel;


class Kernel extends HttpKernel

{

    /**

     * The application's global HTTP middleware stack.

     *

     * These middleware are run during every request to your application.

     *

     * @var array

     */

    protected $middleware = [

        \App\Http\Middleware\CheckForMaintenanceMode::class,

    ];


점검 모드를 실행하여 정상적으로 동작하는지 확인합니다.


php artisan down




반응형

댓글