conf.d 설정 파일이 자동으로 include될 때 생기는 함정

업데이트:

Nginx 설정을 하다 보면 /etc/nginx/conf.d/ 디렉터리 안의 .conf 파일들이 자동으로 포함(include) 된다는 사실을 모르고 헤매는 경우가 있었습니다.처음엔 이걸 모르고 “왜 설정이 안 먹지?” 하면서 밤늦게까지 로그만 들여다본 적이 있었죠.

목차

Nginx 기본 설정 구조

Nginx의 메인 설정 파일(/etc/nginx/nginx.conf)을 열어보면 보통 이런 설정이 있습니다.

http {
    include /etc/nginx/conf.d/*.conf;
    ...
}

이 구문은 말 그대로,

/etc/nginx/conf.d/ 디렉터리 안에 있는 모든 .conf 파일을
http 블록 안으로 자동으로 불러와 합친다는 뜻입니다.

실제로 겪은 “야근 상황”

이걸 모르고 한 번은 정말 몇시간 동안 삽질을 했었습니다.

# /etc/nginx/nginx.conf 
http { include /etc/nginx/conf.d/*.conf; }

# /etc/nginx/conf.d/default.conf (기본 파일 - 삭제 안함) 
server { listen 80 default_server; server_name _; }

# /etc/nginx/conf.d/myapp.conf (새로 추가한 파일)
server { listen 80; server_name myapp.com; }

default.conf의 default_server 설정이 모든 요청을 가로채고 있었던 것이었습니다. default.conf가 myapp.conf보다 먼저 로드되고, 기본 서버로 등록되어 있어서 새로 추가한 서버 블록이 뒤에 와도 무시됐었 던 겁니다.

해결 방법

  1. 기본 default.conf 수정하기

  2. default.conf 파일 자체를 삭제하기

📌 파일명 순서(default.conf, myapp.conf)가 알파벳 순으로 처리되기 때문에, 기본 설정이 먼저 읽히면 새로운 설정이 덮어지지 않을 수도 있다는 점도 주의해야합니다.

결론

conf.d 안의 설정은 자동으로 합쳐지지만, default.conf가 기본 서버로 남아 있으면 새 설정이 무시될 수 있다. 따라서 새로 설정할 때는 default.conf를 수정하거나 삭제하자.

댓글남기기