LaravelでHTTPS対応する正しいやり方
正しいやり方
- HTTPSを強制する場合はWebサーバ側で対処する。HTTPから強制リダイレクトしてもいいし、HTTPは閉じてしまってもいい。
- HTTPSを強制する場合、もしくはHTTPSをデフォルトにしたい場合は
APP_URL
をhttps://...
にする。 - リバースプロキシ下で動かす場合、HTTPSでのアクセスか正しく判別できるようTrustProxiesを設定する。
これだけでいい。
間違ったやり方
よく以下のような方法を見かけるが、これらは必要ない。
- Laravel側でHTTPSでのアクセスか判別する。
- Laravel側で
https://...
にリダイレクトする。 URL::forceScheme()
やsecure_url()
,secure_asset()
でURLを強制的にhttps://...
にする。
なぜ上記のやり方をする必要がないのか
Laravelは基本的には自動で、リクエストを見てHTTPSでのアクセスか判別し、出力するURLを調整している。
artisan
コマンドからの実行などリクエストがない場合は、APP_URL
を見てHTTPSにするか決めている。
リバースプロキシ下でHTTPSでのアクセスかの判別が難しい場合は、TrustProxies
で対応できるようになっている。
そのため上記の方法でわざわざアプリケーションをHTTPSでだけ動作するよう強制する必要はない。
じっさい上記の方法を使うと、開発環境で動かすような場合に不便になり、その回避のためにリダイレクトやURL::forceScheme()
をproductionでだけ動かすようにするなど追加の変更が必要になってしまう。secure_url()
, secure_asset()
に至っては、簡単な回避方法はない。