概要
PaizaCloud
を使うと、簡単に開発環境を構築することができる。有料プランなら、常時公開もできるようになる。
https://paiza.cloud/ja/
Laravel勉強用にPaizaCloudで開発環境を構築していたところ、
HTTPS周りのことでつまずいて、初心者はきっとハマると思うので誰か困った時に参考にしてもらえるように、メモ。
詳しく
php artisan make:auth // ログイン認証画面を作成
php artisan migrate // DBに反映
php artisan serve --host=0.0.0.0
これで、ログイン画面ができたので、xxx.paiza-user.cloud:8000
にアクセス。
しかし、右上のLOGIN
を押しても、
Please use HTTPS(SSL) instead of HTTP to access the URL.
と表示され、ログイン画面が表示されない…
ローカル環境ならちゃんと表示されるのに、なぜだ...
なぜなのか
-
ログイン画面へのリンクが、**
http
**で張られていた -
トップページが**
https
**で表示されているので、当然https
だと思ってリンクがhttp
なのに気が付かなかった・・・ -
PaizaCloudで非SSLなアクセスがあった際、
解決策
[コメントを受け、追記]
ここでhttpsとならないのは、X_FORWARDED_PROTO を使った判定をしていないため。
// 略
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array|string
*/
protected $proxies = "*"; // ここに"*"を指定する
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_ALL;
}
こちらの記事で詳しく解説されている。
https://qiita.com/yamatox/items/8f3f481d88e807793ad5
以下は、forceSchemeを使う方法。この方法では、扱うURLをhttpsに強制する。
AppServiceProvider bootメソッドでUrlGeneratorクラスforceSchemeメソッドを呼び出して、
アプリ内で扱われるURLを全てhttpsにする。
こうすることで、リンクがhttpsで出力されるようになる。
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Routing\UrlGenerator;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot(UrlGenerator $url)
{
// force to use HTTPS
$url->forceScheme('https');
}
}
参考
[Laravel]常時SSLなアプリケーションでのURL生成のベストプラクティスを考える
https://qiita.com/hisash/items/4b3bb1ea47c38b0d8c86