개발
Laravel 6.x

라라벨 구버전에서 pagination link http 문제 해결 (proxy 환경)

54 views as of November 14, 2024.
어쩌다 우연히 발견하게된 문제인데,

라라벨 페이지네이션이 랜더링하는 페이지 버튼의 링크가 https가 아닌 http로 출력되는것을 발견했다. 이 포스팅에선 그 문제와 해결과정에 대한 기술을 해보겠다.


라라벨 페이지네이션

먼저 라라벨 페이지네이션에 대해 알아보자면, 여러개의 데이터행이 있을 경우 특정 개수만큼 짤라서 리스트화를 시켜주는 것으로 게시판 만들기의 가장 기본적인 기능이다.

라라벨 같은경우엔 이런 페이지네이션을 백단에서 호출하면 모델에 같이 담아 반환해주고, 이 페이지 네이션이 있다면 아래와같이 페이지네이션을 랜더링 할 수 있다.

- Backend
$posts = Post::where('title', 'LIKE', "%{$keyword}%")
    ->orderByDesc('created_at')
    ->paginate()
    ->appends($request->input());Copy

- Front
<div class="wrap_pagination">
    {{ $posts->onEachSide(2)->links() }}
</div>Copy

랜더링 결과


문제 발생 - https 링크가 안나옴

여기서 해당 링크는 아래 브라우저 인스펙터 처럼 http 스키마를 포함한 링크를 반환하는데, 여기서 일부 환경에 제한해서 문제가 발생한다.


그 문제되는 환경은 아래와 같다.

- Laravel 구버전 (5.5에서도 보고된 바 있지만 나는 6.x 쓰는데도 마찬가지로 발생)
- https 사용시
- proxy 서버 사용시

1차적인 해결 - 스키마 강제변환

여기서 https 사용시 App\Providors\AppServiceProvider 에 아래와 같이 https 스키마 강제 변환 기능을 아래와 같이 사용하는 것으로 커버칠 수 있다.

public function boot()
{
    if (!\App::environment('local')) {
        \URL::forceScheme('https');
    }
}Copy

문제는 proxy 서버를 사용할 경우에는 일부 라라벨 버전에서 이 설정이 안먹힌다는 것이다.

통상적으로는 프록시 서버를 사용하는 일이 없으니 까 이런 문제가 발생할일이 없다만, 나는 도커를 이용해 가상 환경을 구축하고 역방향 프록시로 nginx 서버를 운용하고 있기 때문에 위와 같은 문제가 발생한 상황이다.

여기서 역방향 프록시 설정시 nginx 요청 헤더에 X-Forwarded-Proto 를 설정해놓을때 일부 마이너한 라라벨 버전에서 https 스키마로 전환해주는 기능이 작동을 안한다고 한다.

진짜 해결 - 라라벨 프록시 신뢰 설정

그래서 결국 이를 해결하기위해서 라라벨 자체에서도 신뢰하는 프록시 서버 설정을 다시금 잡아줄 필요가 있었다.

관련 설정을 제어하기위해 설정파일을 vendor에서 꺼내오기 위해 아래와 같은 명령어를 프로젝트 터미널에 입력해준다.

php artisan vendor:publish --provider="Fideloper\Proxy\TrustedProxyServiceProvider"Copy

그러면 config/trustedproxy.php 라는 파일이 추가되며 이 파일을 열어서 아래 부분을 편집해줍니다.

'proxies' => '*', // [<ip addresses>,], '*', '<ip addresses>,'Copy

디폴트는 null 로 되어있고 이를 아스테리카(전체)로 바꿔줍니다.

설정값을 바꿔주고 다시 프로젝트 터미널에서 설정을 재구성합니다.

php artisan config:cacheCopy

그러고 난 이후에 페이지를 다시 로딩해보면?


제대로 https 링크로 랜더링 되었음을 알 수 있습니다.


문제 해결 후 고찰

이 문제에 대해서 GPT에게 안물어 본건 아니다.
실제로 물어보니 위의 AppServiceProvider의 설정을 다시한번 확인해보라고 안내 받았으니까 말이다.

근데 문제는 그게 아니었고 관련내용을 스택 오버플로우에 찾아보니 프록시 환경에서 마이너 버전의 라라벨에서만 일어났던 문제인걸보니... 새삼 GPT 만능은 아니라는걸 새삼 느끼는 문제해결 과정이 아니었나 싶다.

Changing laravel pagination links to be over HTTPS
Changing laravel pagination links to be over HTTPS
If you are on Heroku you may have noticed that when you have pagination links it comes out over HTTP. This is a problem because when you try to access that page, you get a Mixed Content error because
https://stackoverflow.com/questions/54083854/changing-laravel-pagination-links-to-be-over-https

#개발 #라라벨 #laravel #Paginatino #http #https
0 개의 댓글
×