58
51

More than 5 years have passed since last update.

[Laravel]常時SSLなアプリケーションでのURL生成のベストプラクティスを考える

Last updated at Posted at 2018-05-01

前提

常時SSL化したにも関わらず、asset()とかroute()とかで吐き出されるURLがhttpになってしまう!というお悩みに対するベストプラクティスをまとめてみた。

ケース1: クライアントとアプリ間でSSL通信する場合

AppServiceProvider.phpbootにてUrlGeneratorを注入し、forceschemaを使ってURL生成時のプロトコルを指定する。

app/Providers/AppServiceProvider.php

use Illuminate\Routing\UrlGenerator;

class AppServiceProvider extends ServiceProvider
    public function boot(UrlGenerator $url)
    {
        $url->forceScheme('https');
    }
}

開発環境はhttpだよ!という場合は、app.envを参照して分岐させておく。

app/Providers/AppServiceProvider.php

    public function boot(UrlGenerator $url)
    {
        if (in_array(config('app.env'), ['prd', 'stg'], true)) {
          $url->forceScheme('https');
        }
    }
}

ケース2: クライアントとLB間でSSL通信する場合(LBとアプリ間はHTTP通信)

Laravel >= 5.5

TrustedProxyを利用する。具体的にはミドルウェアのTrustProxiesクラスを良い感じに設定する。

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

namespace App\Http\Middleware;

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

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array
     */
    protected $proxies = '**'; //ここを**にする。

    /**
     * The current proxy header mappings.
     *
     * @var array
     */
    protected $headers = [
        Request::HEADER_FORWARDED => 'FORWARDED',
        Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
        Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
        Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
        Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
    ];
}

参考:Laravel5.5 HTTPリクエスト - 信用するプロキシの設定

Laravel < 5.5

ケース1と同じ方法で対処する、またはcomposer.jsonに以下を追加して、5.5以上では同梱されていたTrustedProxyをインストールする。

composer.json
{
    "require": {
        "fideloper/proxy": "^3.3"
    }
}

参考:fideloper/TrustedProxy

58
51
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
58
51