AWSのCloud9のプレビューで「Oops VFS connection does not exist」と画面に表示された時の対処法を紹介します。
私がこの問題に遭遇した時は、Laravel(version=6.20.27)でアプリケーションにログイン機能を実装してプレビューを見ようとした時でした。
デフォルトでは、viewsのwelcome.blade.phpが表示されます。右上にLOGINとREGISTERが表示されています。
LOGINとクリックすると
REGISTERも同様です。
原因
調べると同様な問題に困っている記事がありました。どうやら、Laravelアプリが生成するリンクのURLがhttpsではなくhttpになってしまうことで色々な不具合があるそうです。
URLに/loginとするとログイン画面が表示されますが、
と表示が変になります。本来は以下のようになります。
ログイン画面でGoogle chromeのデベロッパーツールで確認します。
Google ChromeのデベロッパーツールのConsole欄をみるとhttp通信が問題であるとわかります。
The page at ‘https://……’ was loaded over HTTPS, but requested an insecure script ‘https://……’. This request has been blocked; the content must be served over HTTPS.
日本語訳すると
ページはHTTPS経由で読み込まれましたが、安全でないスクリプトをリクエストしました。 このリクエストはブロックされました。 コンテンツはHTTPS経由で提供する必要があります。
解決方法
App/Http/Middleware/TrustProxies.phpの TrustProxiesクラス proxiesプロパティに ’**’ あるいは’*’ をセットすると解決するようです。Laravel 5.5 の場合は’**’でLaravel 6.x の場合は’*’です。
<?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
*/
protected $proxies="*";
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_ALL;
}
もう一つの方法としてapp/Providers/AppServiceProvider.phpのAppServiceProviderクラスのbootメソッドに以下のように記述します。
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
$this->app['request']->server->set('HTTPS','on');
}
}
まとめ
Oops!!VFS connection does not existがでたらHTTPSにする。