문제 상황
로컬 개발 환경에서는 Execute_menu라는 사용자 정의 HTTP 헤더를 스프링 부트 서버로 잘 전송하고 처리할 수 있었습니다.
그러나 실제 서버 환경으로 배포한 후에는 동일한 요청을 보냈음에도 불구하고, 서버에서 이 헤더의 값을 null로 받는 문제가 발생했습니다.
이는 많은 개발자들이 실제 운영 환경에서 자주 마주치는 문제 중 하나입니다.
원인 분석
이 문제의 원인은 Nginx의 기본 설정 때문입니다.
Nginx는 기본적으로 헤더 이름에 밑줄(_)이 포함된 헤더를 무시합니다.
이는 보안상의 이유로, 헤더를 조작하는 일부 공격을 방지하기 위한 조치입니다.
그러나, 사용자 정의 헤더에 밑줄을 사용하는 경우, 이 기본 설정 때문에 문제가 발생할 수 있습니다.
해결 방안: underscores_in_headers on
이 문제를 해결하기 위한 간단한 방법은 Nginx 설정에 underscores_in_headers on; 지시어를 추가하는 것입니다. 이 설정을 추가하면 Nginx가 밑줄이 포함된 헤더를 인식하고 허용하게 됩니다.
설정 추가 방법
Nginx의 메인 설정 파일(nginx.conf)을 엽니다.
http 블록 내에 다음 설정을 추가합니다:
설정을 추가한 후, Nginx를 재시작하거나 재로드합니다.
Nginx 재시작: sudo systemctl restart nginx or sudo service nginx restart
변경사항을 적용한 후에는 nginx -t 명령어를 사용하여 Nginx 설정의 유효성을 검사하는 것이 좋습니다.
주의사항
underscores_in_headers on; 설정을 사용할 때는 보안상의 리스크를 고려해야 합니다. 밑줄을 포함한 헤더는 보안 취약점을 유발할 수 있으므로, 반드시 필요한 경우에만 사용하는 것이 좋습니다.
이 설정은 Nginx가 모든 밑줄이 포함된 헤더를 허용하게 하므로, 애플리케이션의 다른 부분에서 예상치 못한 문제가 발생할 수 있습니다. 따라서 설정 변경 전후로 충분한 테스트가 필요합니다.
결론
underscores_in_headers on; 설정은 Nginx에서 밑줄이 포함된 헤더를 허용하는 간단하면서도 효과적인 방법입니다. 이 글이 여러분이 유사한 문제를 해결하는 데 도움이 되기를 바랍니다.