Nginx에서 헤더 전달하기 (프록시 사용)

thumbnail

분명 로컬에서는 잘 되었는데…

흑우집합소 개발이 다 되서 프로덕션 환경에서 배포 후 처리를 하는데 로그인 부분이 제대로 되지 않았다.
왜 그런가 콘솔 로그까지 찍어가며 확인해본 결과 헤더의 특정 값이 전달되지 않았다.

그래서 찾아보니…
Nginx는 기본 헤더나 잘 알려진 기본 헤더 값만 전송한다고 한다.

기본 Http 헤더는 모질라 개발 문서를 참고하자.
무튼 어떻게 해야 하나 방법을 찾아보니 의외로 간단했다.

How to?

참고로 난 Http로 오면 https로 포워딩하고, 내부 프론트엔드를 바라보게 되어있다.
그리고 설정은 다 못까지만 일부는 오픈한다.
또한 Ubuntu 환경에서 진행한다.

먼저 정답을 이야기 하면 두 가지 옵션을 넣으면 된다.
underscoresinheadersproxypassrequest_headers 옵션이다.

설명을 이어나가면…
nginx.conf 또는 자신의 별도 설정 파일에서 포워딩하는 부분을 찾는다.

아래는 80에서 443으로 포워딩하는 부분이다.
여기는 설정할게 없다.

다음은 https쪽이다.

### 443 (Https)
server {
  #기본 설정
  listen 443;
  listen [::]:443;
  root /var/www/html;

  server_name bcow.world;

  underscores_in_headers on; #언더스코어 형식 헤더 허용
  location / {
    proxy_set_header Range $saferange;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-NginX-Proxy true;

    proxy_pass http://localhost:68742;
    proxy_pass_request_headers on; #리퀘스트로 온 헤더를 프록시로 전달
  }
}

저기 주석에 나온 것처럼 하면 된다.
헤더에 난 _(언더스코어)를 써서 보내는 것들이 있어서 저 옵션도 넣었다.

이렇게 하니까 해결이 되었다.

정리

내가 두 서비스를 배포하면서 느낀게 있다.
로컬에서는 잘 되는데 배포를 하면 안되는 경우, 변경된 개발환경을 살펴봐라.

그 변경된 개발환경이 나의 경우 nginx밖에 없었기에 이 부분이 정답이었다.
왜 안되지라고 시간 많이 먹을 뻔 했다…


Written by@MHLab
로또는 흑우집합소 🎲
와인관리, 시음노트, 셀러관리는 마와셀 🥂

🫥 My Service|  📜 Contact|  💻 GitHub