困っている現象
リバースプロキシサーバを通したLaravelアプリケーションで初めてログイン処理やページ送り処理の際にWEBサーバのURLの方にリダイレクトされてしまい、ERR_SSL_PROTOCOL_ERRORのブラウザエラーになってしまう。
初回動くとき(キャッシュがないとき)に、リバースプロキシサーバのホスト名$_SERVER['HTTP_X_FORWARDED_HOST']ではなく、Webサーバのホスト名$_SERVER['HTTP_HOST']にリダイレクトされてしまうような挙動となっています。
2回目以降は$_SERVER['HTTP_X_FORWARDED_HOST']のURLを引き継いだまま動くことを確認できています。
この挙動はChromeやEdgeのみでFirefoxでは正常に動くためリバースプロキシとして動かしているnginxが原因(または要因)の可能性もあります。
Laravelのリバースプロキシの設定
TrustProxiesの設定
App\Http\Middleware\TrustProxies
php
1 2 protected $proxies = [ 3 '127.0.0.1', 4 ]; 5 6 protected $headers = Request::HEADER_X_FORWARDED_ALL; 7
AppServiceProviderでforceSchemeとforceRootUrlの指定
App\Providers\AppServiceProvider
php
1 2 public function boot( UrlGenerator $url ) 3 { 4 5 if ( \App::environment() === 'production' || \App::environment() === 'staging') { 6 $url->forceScheme('https'); 7 } 8 9 \URL::forceRootUrl(\Config::get('app.url'));// ルートURLを設定 10 } 11
これらの設定により、ログイン時のPOST先URLはhttpsのURLになっていることは確認できています。
ちなみにLaravelはPHP7.2、Aapche2.4配下で動いています。
nginxのリバースプロキシの設定
リバースプロキシでHTTPの通信はSSLにリダイレクトするようにしているのですが
nginxの設定によりhttp://127.0.0.1:8080にはもともと外部から直接アクセスできないため、
初回ログイン時Laravelのリダイレクトでhttp://127.0.0.1:8080にアクセスしようとしてしまい、
アクセス不能となってブラウザエラーとなってしまっているように見えます。
ただ、2回目以降やfirefoxでは正常に動くため完全に間違っているようではないみたいです。
location/{ allow xxx.xxx.xxx.xxx; deny all; proxy_redirect off; proxy_pass http://127.0.0.1:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_hide_header X-Powered-By; proxy_ignore_headers Expires; }
どなたか要因等ヒントがありましたら教えていただけると助かります。
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。