Published on

nginx 설정 테스트 하는 법: nginx -t부터 reload까지

Authors
  • avatar
    Name
    Indo Yoon
    Twitter

nginx 설정 테스트는 설정 파일을 바꾼 뒤 바로 재시작하지 않고, 먼저 문법과 구조를 확인하는 절차예요. 기본은 nginx -t로 검사하고, 통과하면 systemctl reload nginx나 nginx -s reload로 반영해요. 이 순서를 지키면 오타나 잘못된 include 경로 때문에 서비스가 중단되는 일을 줄일 수 있어요.

한눈에 보기

설정을 바꾼 뒤에는 “검사, 확인, 반영, 관찰” 순서로 움직이면 안전해요. nginx -t는 설정을 실제로 적용하지 않고 검사만 해요. nginx -T는 include까지 포함한 전체 설정을 출력해서, 내가 고친 파일이 정말 읽히는지 확인할 때 유용해요. 검사를 통과해도 업스트림 서버의 상태나 인증서 권한까지 자동으로 보장되는 것은 아니에요. 따라서 reload 후에는 로그와 실제 응답을 함께 확인하는 습관이 필요해요.

  • 설정 파일을 수정하기 전에 현재 파일을 백업해요.
  • nginx -t로 문법과 기본 유효성을 검사해요.
  • 필요하면 nginx -T로 include와 최종 설정을 확인해요.
  • systemctl reload nginx 또는 nginx -s reload로 반영해요.
  • error_log, access_log, 실제 요청 응답을 확인해요.

명령별 비교 표

명령확인하는 것주의할 점
nginx -t기본 설정 파일의 문법과 유효성설정을 실제로 반영하지는 않아요.
nginx -Tinclude까지 포함한 전체 설정 출력인증서 경로나 토큰 같은 민감한 값이 드러날 수 있어요.
nginx -t -c 경로기본 경로가 아닌 설정 파일 검사상대 경로는 prefix 기준으로 해석될 수 있어요.
nginx -t -p 경로prefix를 바꿔 설정 검사include 경로도 함께 달라질 수 있어요.
nginx -q -t오류 외 메시지를 줄여서 검사성공 여부는 종료 코드로 확인해요.
systemctl reload nginx실행 중인 서비스에 설정 반영반드시 테스트를 통과한 뒤 실행해요.
nginx -s reloadmaster 프로세스에 reload 신호 전달PID 경로와 실행 권한을 확인해야 해요.

단계별 테스트 방법

먼저 현재 설정을 백업해요. 운영 중인 파일을 바로 덮어쓰기보다, 날짜나 배포 단위로 복사본을 남겨 두면 문제가 생겼을 때 되돌리기 쉬워요. 설정 관리 도구를 쓴다면 저장소의 이전 커밋도 함께 확인해요.

다음으로 실제 서비스가 사용하는 설정 경로를 확인해요. 배포판마다 기본 경로가 다를 수 있고, systemd 서비스가 -c나 -p 옵션으로 다른 경로를 지정할 수도 있어요. 서비스 이름이 nginx라면 systemctl cat nginx로 실행 명령과 설정 경로를 확인할 수 있어요. 컨테이너라면 이미지의 기본 설정 경로와 마운트 위치를 함께 봐야 해요.

설정 파일을 수정한 뒤에는 nginx -t를 실행해요. 출력에 syntax is ok와 test is successful이 나오면 문법 검사는 통과한 거예요. 오류가 나오면 메시지에 표시된 파일과 줄을 기준으로 먼저 고쳐요. 이때 nginx -t는 설정을 반영하지 않으므로, 검사 단계에서 실패해도 기존 서비스는 계속 동작해요.

include를 많이 쓰는 구성이라면 nginx -T로 전체 설정을 확인해요. nginx -t만으로는 내가 의도한 파일이 실제로 include되는지 눈으로 보기 어려울 수 있어요. nginx -T는 검사와 함께 최종 설정을 출력하므로, 중복된 server 블록이나 예상과 다른 location이 없는지 확인하기 좋아요. 다만 출력에 민감한 값이 포함될 수 있으니 공유 로그나 이슈에 그대로 붙이지 않아요.

검사를 통과하면 reload로 반영해요. systemd 환경에서는 systemctl reload nginx를, 직접 신호를 보내는 환경에서는 nginx -s reload를 사용해요. reload는 기존 연결을 처리하는 worker를 두고 새 설정을 반영하는 방식이라, 설정만 바꾸는 일반적인 배포에 잘 맞아요. 바이너리 교체나 모듈 변경처럼 reload로 반영되지 않는 작업은 restart가 필요할 수 있어요.

반영 후에는 로그와 실제 응답을 확인해요. error_log에 새 오류가 쌓이는지 보고, 주요 도메인이나 경로에 curl -I로 요청해 상태 코드와 헤더를 확인해요. 업스트림 서버를 쓰는 구성이라면 애플리케이션 헬스 체크도 별도로 확인해요. 문제가 보이면 백업한 설정을 복원하고 다시 nginx -t와 reload를 거쳐요.

상황별 선택 기준

로컬 개발 환경에서는 프로젝트 전용 설정 파일을 nginx -t -c로 검사하는 방식이 편해요. 기본 설정과 섞이지 않게 prefix를 맞춰 주고, include 경로가 프로젝트 디렉터리를 가리키는지 확인해요. 개발 환경에서는 reload보다 프로세스를 직접 다시 띄우는 경우도 있지만, 운영과 비슷한 검사 절차를 익히려면 nginx -t를 먼저 실행하는 습관이 좋아요.

운영 환경에서는 설정 변경과 반영을 분리해서 생각해요. 먼저 변경 사항을 검사하고, 배포 창구나 승인 절차를 거친 뒤 reload해요. 트래픽이 적은 시간대를 고르는 것도 도움이 되지만, 무엇보다 백업과 롤백 계획을 준비하는 것이 중요해요. 설정만 바꾸는 경우에는 reload를 우선 검토하고, restart는 필요한 상황으로 제한해요.

컨테이너 환경에서는 실제 실행할 이미지와 같은 이미지로 검사해요. 호스트에 설치된 nginx로 검사하면 이미지 안의 모듈이나 기본 경로가 달라서 결과가 어긋날 수 있어요. 설정 파일, 인증서, include 대상 파일을 실제 실행 때와 같은 위치에 마운트한 뒤 nginx -t를 실행해요. 이미지 빌드 단계에서 검사할 수 있다면 배포 전에 오류를 더 빨리 발견할 수 있어요.

쿠버네티스처럼 Ingress 컨트롤러가 설정을 생성하는 환경에서는 생성된 설정을 직접 고치기보다 컨트롤러의 검증 절차를 따라요. 컨트롤러가 만든 설정을 임의로 수정하면 다음 동기화 때 사라질 수 있어요. 직접 nginx 설정을 관리하는 경우에도 파드 안의 설정과 마운트된 파일이 일치하는지 확인한 뒤 검사해요.

배포 파이프라인에서 설정을 관리한다면 nginx -t를 배포 전 검사 단계에 넣어요. 설정 파일을 렌더링한 뒤 실제 실행 환경과 같은 경로에서 검사하면, 오타나 빠진 include를 일찍 잡을 수 있어요. 검사가 실패하면 배포를 멈추고 이전 설정을 유지하도록 구성하는 것이 안전해요.

주의할 점

nginx -t 통과는 “설정 문법이 맞다”는 뜻이지 “서비스가 정상이다”라는 뜻은 아니에요. 업스트림 서버의 응답, DNS, 방화벽, 인증서 만료, 파일 권한은 별도로 확인해야 해요. 특히 인증서 개인 키 파일의 권한이나 SELinux 같은 보안 모듈 설정은 reload 시점에 문제가 드러날 수 있어요.

nginx -T는 편리하지만 전체 설정을 출력해요. 인증서 경로, 토큰, 내부 호스트 이름 같은 값이 포함될 수 있으므로 출력 결과를 공개된 곳에 그대로 올리지 않아요. 필요한 부분만 확인하거나, 민감한 값을 마스킹한 뒤 공유해요.

include 경로는 상대 경로와 절대 경로를 구분해서 봐요. -p로 prefix를 바꾸면 include의 상대 경로 해석도 달라질 수 있어요. 실제 서비스가 사용하는 실행 명령과 같은 옵션으로 검사했는지 확인하는 것이 중요해요.

reload와 restart는 같은 동작이 아니에요. 설정만 바꿨다면 reload가 일반적이지만, 바이너리나 모듈을 교체했다면 restart가 필요할 수 있어요. restart는 순간적으로 연결이 끊길 수 있으므로 운영에서는 영향 범위를 먼저 확인해요.

검사와 반영을 한 번에 처리하는 스크립트를 만들 때도 실패 처리를 넣어요. nginx -t가 실패하면 reload를 실행하지 않도록 하고, reload 후에도 로그 확인 단계를 남겨요. 자동화가 편하더라도 마지막 확인 지점은 사람이 볼 수 있게 두는 것이 좋아요.

자주 묻는 질문

nginx -t만 통과하면 바로 적용해도 되나요?

문법 검사 통과는 첫 단계예요. 업스트림 연결, 인증서 경로, 파일 권한, 방화벽은 별도로 확인해야 해요. 운영에서는 reload 후 로그와 실제 응답을 확인하는 절차까지 함께 가져가세요.

nginx -t와 nginx -T는 무엇이 다른가요?

-t는 설정을 검사만 하고, -T는 검사하면서 include까지 포함한 전체 설정을 출력해요. 포함 파일이 실제로 적용되는지 눈으로 확인할 때 -T가 유용해요. 다만 민감한 값이 출력될 수 있어요.

설정 파일 경로가 기본과 다르면 어떻게 하나요?

nginx -t -c 뒤에 설정 파일 경로를 지정해요. include의 상대 경로가 달라지면 -p로 prefix도 맞춰 줘야 해요. 실제 서비스가 사용하는 경로와 같은지 먼저 확인하세요.

reload와 restart 중 무엇을 먼저 해야 하나요?

설정만 바꿨다면 reload가 일반적이에요. reload는 기존 연결을 처리하는 worker를 두고 새 설정을 반영하는 방식이에요. 바이너리 교체나 모듈 변경처럼 reload로 반영되지 않는 작업은 restart가 필요할 수 있어요.

출처

운영 중 reload와 restart 선택이 헷갈린다면 nginx reload와 restart 차이 글도 함께 읽어 보세요.