728x90
배경
https://t-admin.test.com:21000/information/file/helo 경로에서 게시판을 등록한 후 원래는 뒤로가기 로직으로 돌아가야 하는데, 실제로는 뒤로 가지 않고 도메인에서 포트가 빠져버리는 증상이 발생했다.
분석
브라우저 개발자 도구의 Network 탭 → Initiator 항목을 확인하면 어떤 체인으로 페이지가 이동했는지 알 수 있다.
소스 코드 분석 결과, 게시판 등록 후 서버에서 반환하는 Location 값이 /information/file/helo (상대 경로)였다.
상대 경로라면 브라우저는 현재 요청의 Host + Port를 기준으로 URL을 만들어야 한다.
하지만, 리버스 프록시(Nginx) 설정에서 백엔드로 넘겨주는 Host 헤더에 포트가 포함되지 않으면, 애플리케이션이 절대 URL을 생성할 때 포트를 모른다. 이 경우 브라우저는 https://도메인/… 형태로 (기본 포트 443) 접근하게 되고, 그 결과 포트가 빠진 URL로 리다이렉트가 발생한다.
즉, 포트를 사용하는 도메인 환경에서만 발생하는 문제이며, 기본 포트(80/443) 환경에서는 경험할 수 없는 증상이다.
이 문제는 Nginx proxy 헤더 설정으로 해결 가능하다.
권장 사항
location / {
proxy_pass <http://10.100.11.105:12000>;
# Host 헤더를 포트까지 포함하도록 변경
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 추가: 앱이 Forwarded 헤더를 참고할 경우 대비
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Port $server_port;
}
1. proxy_set_header Host $host:$server_port;
- 실제 HTTP 요청 헤더 Host:를 오버라이드.
- 브라우저가 보낸 Host 대신 Nginx가 upstream에 전달하는 값.
- 대부분의 웹 프레임워크/애플리케이션은 절대 URL 생성 시 Host 헤더를 기준으로 삼음.
- → 포트를 포함하지 않으면 기본 포트(443)로 간주되어 잘못된 리다이렉트 발생.
2. proxy_set_header X-Forwarded-Host $host:$server_port;
- 클라이언트가 요청한 Host(+포트)를 프록시가 따로 전달.
- 일부 프레임워크는 Host: 대신 X-Forwarded-Host를 읽어 리다이렉트용 URL을 생성.
- 예: Spring Boot → server.forward-headers-strategy=native 옵션을 켜야 사용.
3. proxy_set_header X-Forwarded-Port $server_port;
- 요청이 들어온 실제 포트를 전달.
- Django, Spring, Rails 등 일부 프레임워크는 이 값을 참고하여 절대 URL 생성 시 반영.
✅ 핵심: 혹시 모르니 Host 헤더에 포트까지 넣자.
728x90
'Linux' 카테고리의 다른 글
| HTTPS 인증 오류 트러블슈팅: 불특정 다수에게 발생한 SSL 인증서 문제 해결기 (0) | 2025.10.14 |
|---|---|
| bash_profile, bashrc 차이점 (1) | 2025.05.14 |
| All available gssapi mechanisms failed 에러가 나는 이유 (0) | 2025.04.16 |
| pam_tally2 실패 횟수 자동 증가 증상 (0) | 2025.04.16 |
| SFTP 특정 디렉토리만 접근 가능하도록 하는 방법 (sftp chroot) (2) | 2024.10.29 |