質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1936閲覧

Laravelのメンテナンスモードで指定したIPからアクセスしてもメンテナンス画面になってしまう

poteto4401

総合スコア57

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

2クリップ

投稿2019/06/14 08:58

編集2019/06/14 12:02

問題点

Laravelのメンテコマンドを実行し、許可するIPを設定してもメンテナンス画面になってしまいます。

開発環境では、メンテモードにしても自分のIPからであれば動かすことはできたのですが、
本番環境ではallowに自分のIPを設定したにもかかわらず、メンテナンス画面になってしまいます。

本番環境環境はALB配下にあるのですが、それが問題なのでしょうか?
それが問題だとした場合、コマンドでのメンテナンスモードでは解決できず、ミドルウェア等を実装して実現するしかないのでしょうか?

やったこと

$ artisan down --allow=xxx.xxx.xxx.xxx(自分のIP)

環境

AWS

開発環境: EC2
本番環境: ALB配下のEC2

どちらも自分のIPからはアクセス可能です。

〜〜〜

追記

CheckForMaintenanceModeをオーバーライドし、HTTP_X_FORWARDED_FORを読むようにしました。
※本番では未確認

/** * 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()) { $data = json_decode(file_get_contents($this->app->storagePath().'/framework/down'), true); // ロードバランサー対応 if (isset($data['allowed']) && IpUtils::checkIp($request->server->get('HTTP_X_FORWARDED_FOR'), (array) $data['allowed'])) { return $next($request); } if (isset($data['allowed']) && IpUtils::checkIp($request->ip(), (array) $data['allowed'])) { return $next($request); } if ($this->inExceptArray($request)) { return $next($request); } throw new MaintenanceModeException($data['time'], $data['retry'], $data['message']); } return $next($request); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ミドルウェア等を実装して実現するしか

ここはその通りだと思いますが

コマンドでのメンテナンスモードでは解決できず、

これはそんなことないような

LB配下ってことならX-forwerded-forを判定材料に使うのが自然なことと、
Kernel見ると

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

を読み込んでるって事を考えると↑を拡張してX-forwerded-forを判定材料にするよう処理改良したら良さそうです。オーバーライド出来そうな関数もあることだし。

と言ってもサラッと見ただけで調査したわけじゃありません。解決したら解決に至ったコード書いてもらえたら嬉しいなー

投稿2019/06/14 10:31

hentaiman

総合スコア6415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poteto4401

2019/06/14 10:41

解答ありがとうございます! なるほど、そのあたり調査してみます!
poteto4401

2019/06/14 12:03

ローカル環境でHTTP_X_FORWARDED_FORを付与して確認することができました! まだ本番環境では確認できておりませんが。 これ、HTTPSでも問題ないのでしょうか?
hentaiman

2019/06/14 12:07

LBまでがhttpsでLBとWEBサーバー間はhttpですよね?
hentaiman

2019/06/14 12:25

AWSのLBがどんな仕組みか知らないけど、外からLBまでをhttps通信にしてLBからアプリケーションサーバーまでをhttpにする事は普通のことだし、その際にLBでX-forwarded-forなどサーバー環境変数を付与してアプリケーションサーバーで使うのは普通の事ですよ
poteto4401

2019/06/15 02:47

> LBまでがhttpsでLBとWEBサーバー間はhttpですよね? そうです! 一旦解答はこのままにさせていただいて、本番環境で確認できたら閉じさせていただきますね! ありがとうございます!
poteto4401

2019/06/24 05:14

本番環境で確認できました!
hentaiman

2019/06/24 06:58

結果教えてくれてありがとうございます。参考にさせていただきます~
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問