首先我們獲取一下當前的網路連線是不是HTTPS
use \Illuminate\Http\Request;
.....
$request->getScheme();
......
跟蹤程式碼我們可以看到 $this->isSecure()
/*
*
* Gets the request's scheme.
*
* @return string
*/
public function getScheme()
{
return $this->isSecure() ? 'https' : 'http';
}
繼續跟蹤程式碼 在isSecure()
中我們可以得到自己的答案
/*
*
*/
public function isSecure()
{
//首先去檢查訪問客戶端ip是否在白名單裡 可以通過setTrustedProxies()進行設定
// 這裡有個坑,isFromTrustedProxy()驗證的是客戶端ip,只能在區域網中使用,如果你需要區域網外使用就不適用
if ($this->isFromTrustedProxy()
&& $proto = $this->getTrustedValues(self::HEADER_X_FORWARDED_PROTO)) {
return \in_array(strtolower($proto[0]), ['https', 'on', 'ssl', '1'], true);
}
// 取巧的方式就是 我們可以手動去設定變數HTTPS $this->server->set('HTTPS', 'on');
$https = $this->server->get('HTTPS');
return !empty($https) && 'off' !== strtolower($https);
}
從結果來看,我這邊使用負載均衡無法通過$this->isFromTrustedProxy()
就意味著我們需要自己去設定全域性屬性
在AppServiceProvider
中
public function boot()
{
if ($this->app->environment('production')) {
app(Request::class)->server->set('HTTPS', 'on');
}
}
這裡只是提供我的解決方法,可能使用有不恰當。
如果有更好的方法,請留言補充