nginx에서 default_server를 막아야 하는 이유 (+ https)
nginx를 서버에 처음 설치하면 기본적으로 default라는 가상 호스트 파일이 존재할 것입니다. 저는 alpine linux를 타 배포판보다 선호하여 /etc/nginx/conf.d 폴더에 설정 파일이 자리하고 있는데 보통의 배포판이라면 /etc/nginx/sites-enabled (우분투, 데비안.. )에도 설정 파일이 존재합니다. 저희는 이 default라는 가상 호스트 파일에서 무조건 return 444; 문으로 서버 응답을 제한하면 됩니다. 기본적으로 alpine linux에서는 보안 지침으로 이미 404를 기본적으로 리턴하도록 되어 있지만 서버 자원을 조금이라도 더 절약하기 위해서 444로 변경하였습니다.
///// file start
# This is a default site configuration which will simply return 404, preventing
# chance access to any other virtualhost.
server {
listen 80 default_server;
listen [::]:80 default_server;
# Everything is a 444
location / {
return 444;
}
}
///// file end
이렇게 default_server가 막혀있지 않은 서버의 경우에는 서버가 등록되지 않은 호스트로 접근되었을 때 어떻게 fallback되어 무슨 일을 일으킬 수 있을지 모릅니다. 또한 HTTPS의 경우에는 불완전한 연결을 만들 수도 있습니다. 아래 항목 또한 스니펫으로 사용하면 https 연결에 대해서도 호스트가 일치하지 않으면 444를 리턴하게 됩니다.
///// file start
if ($host != $server_name) {
return 444;
}
///// file end