Почему request()->isSecure() возвращает false при посещении HTTPS-адреса? Я использую Laravel Forge, и у меня есть балансировщик нагрузки. Регистрируя запрос, я получаю следующие данные:
request()->url(), // "http://xx.xx"
request()->isSecure(), // false
request()->getClientIps(), // XX.XX.XX.XX
В TrustProxies (который добавлен в массив $middleware в Http/Kernel.php):
protected $proxies = [
'XX.XX.XX.XX', // exactly the same as in the logged data above
];
В моем методе AppServiceProviderboot():
if (env('APP_ENV') == 'production') {
\URL::forceScheme('https');
}
Редактировать:
Я также использую Cloudflare, и я также добавил все прокси Cloudflare в $proxies. Проверь логи, в запросе вижу такие заголовки:
X-Forwarded-Proto: http
Cf-Visitor: {"scheme":"https"}
Referer: https://xx.xx/someurl
Вы должны иметь возможность пересылать заголовки с помощью балансировщика нагрузки, но это выходит за рамки SO.
Если ваш балансировщик нагрузки обменивается данными с веб-серверами через HTTP вместо HTTPS, вы увидите такое поведение. В зависимости от балансировщика нагрузки может быть X-Forwarded-Proto, который вы можете использовать для обнаружения HTTPS.
В моем журнале я вижу X-Forwarded-Proto: http. Что я не упомянул в своем первоначальном вопросе, так это то, что я также использую Cloudflare. Я обновил вопрос, добавив более подробную информацию.






Пока вы используете Cloudflare, вы должны использовать «Режим полного шифрования SSL / TLS».
Вероятно, что запрос, который видит Laravel, находится между вашим балансировщиком нагрузки и вашим веб-сервером, который не должен использовать https.