Laravel 혼합 콘텐츠 오류를 수정하는 방법

2709 단어
로드 밸런서 뒤에 Laravel 앱을 배포하고 이것을 볼 것으로 예상했습니까?


하지만... 이거 보여?



잘 찾아오셨습니다!

왜 이런 일이 발생합니까?



솔루션에 들어가기 전에 먼저 진행 상황을 빠르게 설명하겠습니다.

로드 밸런싱 솔루션을 설정할 때 들어오는 요청에 대한 트래픽을 다른 서버로 전달하는 전용 서버를 갖게 됩니다.

SSL 인증서는 로드 밸런서 서버에 적용되지만 대상 서버에는 적용되지 않습니다.

사이트에 대한 요청이 이루어지면 요청이 로드 밸런서에 도달하고 로드 밸런싱 서버에서 SSL로 암호화됩니다. 내부적으로 로드 밸런서는 대상 서버에 또 다른 요청을 하고 있습니다. 그러나 이 요청은 SSL을 종료하는 포트 80을 통해 이루어집니다. 그런 다음 대상 서버는 내부 통신 중에 http가 종료되었으므로 https를 통해 요청을 반환합니다.

그래서 기본적으로 그게 전부입니다!

대상 서버는 https 를 사용하여 정보를 반환해야 한다는 사실을 모릅니다. 이로 인해 http 대신 https를 통해 자산이 제공되므로 혼합 콘텐츠에 플래그가 지정되고 사이트가 올바르게 렌더링되지 않습니다.

이것은 또한 모든 것이 예상대로 렌더링되는 로드 밸런서 뒤가 아닌 일반 서버에 Laravel 앱을 처음 배포한 경우 매우 혼란스러울 수 있는 이유이기도 합니다.

이제 이 문제를 해결하는 몇 가지 방법에 대해 논의해 보겠습니다.

해결 방법 1 - URL을 'https'로 강제 설정



첫 번째 방법은 프로덕션 모드에서 실행할 때 URL 생성에 https를 사용해야 한다고 앱에 알리는 것입니다.
AppServiceProvider.php 에서 public function boot()에 일부 코드를 추가하여 앱이 프로덕션 모드에서 실행 중일 때 URL을 https로 강제 설정합니다.

// add this to the top of the file
use Illuminate\Support\Facades\URL;


// add this statement to public function boot()
if($this->app->environment('production')) {
    URL::forceScheme('https');
};



위의 업데이트를 수행한 후 앱을 배포하면 혼합 콘텐츠 문제가 더 이상 발생하지 않습니다.

해결 방법 2 - 신뢰할 수 있는 프록시 목록에 로드 밸런서 IP 추가



두 번째 솔루션은 Laravel 문서에 따라 권장되는 솔루션으로 승인된 프록시 목록에 신뢰할 수 있는 프록시 외부 IP를 추가하는 것입니다.

이를 위해 TrustProxies.php 를 통해 미들웨어를 업데이트합니다.

라인protected $proxies;을 찾으면 다음과 같이 업데이트됩니다.

protected $proxies = [
        '1.2.3.4'  //replace with load balancer's public IP
    ];


위의 업데이트를 수행한 후 앱을 배포하고 붐! 더 이상 혼합 콘텐츠 오류가 없습니다!


이 가이드 또는 이와 유사한 문제가 발생하는 경우 이 가이드가 도움이 되기를 바랍니다.

더 알고 싶거나 다른 가이드에 대한 아이디어가 있습니까? Chat with us on the forum .

이 예제에서는 GitHub by Chetans9에서 찾은 임의의 Laravel 예제를 사용하여 분기했습니다.

좋은 웹페이지 즐겨찾기