5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HerokuでHTTP(保護されていない通信)にリダイレクトされてしまう問題。Laravel。

Last updated at Posted at 2020-11-02

問題

ジャズライブの感想を投稿できるアプリをチーム開発しています。
HerokuにデプロイしたアプリのURLはHTTPSなのですが、感想を投稿した後(=form送信&DB接続後)、トップページにリダイレクトさせるとなぜかHTTPになってしまう問題に直面しました。

ルーティングやリダイレクトに問題があるのかと探っていましたが、解決策は違うところにありました。答えは公式ドキュメントに→「Laravel 7.x HTTPリクエスト 信用するプロキシの設定

これ、解決策はあっという間にできるのですが、この現象そのものをきちんと理解するのが初心者には大変です...。

原因

上記リンクの公式ドキュメントに説明があります。

信用するプロキシの設定

TLS/SSL証明を行うロードバランサの裏でアプリケーションが実行されている場合、アプリケーションがときどきHTTPSリンクを生成しないことに、気づくでしょう。典型的な理由は、トラフィックがロードバランサにより80番ポートへフォワーディングされるため、セキュアなリンクを生成すべきだと判断できないからです。
(公式ドキュメントより抜粋)

初心者の同志よ...これ言っている意味わかります?(笑)
僕にはほぼ全ての名詞がわかりませんでした(涙)

  • プロキシ:ブラウザとサーバーの間に存在していて、僕らのアプリにアクセスしてくるあらゆるコンピュータ、ソフトウェアのこと。proxyとは英語で代理人の意味。
  • TLS:Transport Layer Security。公開鍵証明書による通信相手の認証と、通信の暗号化をしつつ、データを送受信するプロトコル(=通信規約)の一つ。HTTPと合体してHTTPS(HTTP over SSL/TLS)になる。
  • SSL:TLSの前任者。
  • ロードバランサ:負荷(load)分散装置(blancer)。 サーバーを複数台配置して、各サーバーの負荷のバランスを図る人。ただ上記文章では、プロキシみたいな文脈で使われているようです。
  • 80番ポート:ポート番号80はHTTP。HTTPSは443。IPアドレスが各コンピュータ(PCやサーバー)を特定するための住所、ポート番号はその先の部屋番号。
  • セキュアなリンク:HTTPSのリンクのこと。

一説によると、Herokuは僕らのアプリを安全なところで保管してくれているので、基本はわざわざ暗号化の手間がかかるHTTPSではなくHTTPで接続するとのこと。Herokuのアプリケーションサーバーにアクセスできるプロキシは限定されていて、安全性が担保されており、暗号化の必要はない、だから80番(HTTP)にフォワードするということみたいです。それならばなぜデフォルトがHTTPSなのかが謎なところですが。。。

解決策

6文字追記するだけです...

app/Http/MiddleWare/TrustProxies.php
<?php

namespace App\Http\Middleware;

use Fideloper\Proxy\TrustProxies as Middleware;
use Illuminate\Http\Request;

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array|string|null
     */
    protected $proxies = '*'; //ここに' = *'を追加するのみ!

    /**
     * The headers that should be used to detect proxies.
     *
     * @var int
     */
    protected $headers = Request::HEADER_X_FORWARDED_ALL;
}

$proxiesに信用するプロキシのIPアドレスを追加します。'*'は全プロキシを信用するという設定です。HerokuのプロキシのIPアドレスが分からず、Herokuのセキュリティレベルならこれでも大丈夫そうということで、これを採用しました。

何かご指摘などございましたら、ぜひコメントにてよろしくお願い申し上げます。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?