2019/10/07

Laravel Urlenerator 判斷 HTTP or HTTPS 的因素

第一個要求 Laravel 要使用 HTTP or HTTPS (以下簡稱 protocol ... 因為字太多了 .._Drz) 的方法,其實就是在「.env」做設定,例如:
APP_URL=http://zeroplex.tw

再來網路上應該會找到,要開發者在 AppServiceProvider 中加入設定:
\URL::forceScheme('https');

這邊的 URL facade,可以從 config/app.php 中追蹤到,是 \Illuminate\Routing\UrlGenerator::class 的 alias,設定了 forceSheme() 以後,未來透過 UrlGenerator 建立的 link 都會是設定好的 protocol。

BUT .... 就是這個 BUT,若是遇到另一個其他的 method 來產生 URL (例如 Illuminate\Routing\Redirector::route() ...),這樣就可能吃到開發者設定的 protocol ,則由 Laravel 會自動抓進來的 request 來判斷該用什麼 protocol,若 application 剛好是靠 Nginx 在 handle HTTP SSL 的話,request 到 Laravel 這端時 HTTPS 就已經轉成 HTTP,導致 Laravel 以為 application 沒有上 HTTPS。

若要讓 reverse proxy 後面的 Laravel application 都固定用 HTTPS 的話,可以再到 app/Http/Middleware/TrustedProxy.php 去修改設定,讓 Laravel 識別 proxy 做出對應的動作 (給正確的 protocol)。



Ref: Laravel 5 force HTTPS issue with login routing to HTTP

沒有留言:

張貼留言

除非必要,請不要在回覆時留下您的敏感資訊 (電話、email、地址等)