Nginx Reverse Proxy Catch-All Server 설정

mosad2334·2021년 10월 31일
0
post-thumbnail

제목을 간단하게 적고싶지만 도저히 방법이 없네요.
Nginx Reverse Proxy 서버 구축 후 설정 되지 않은 호스트가 서버에 진입될 시, 데이터를 보내주지 않기 위한 목적으로 수행한 내용입니다.

example.com 의 도메인은 Nginx Reverse Proxy 서버가 구축된 서버의 아이피로 향하도록 DNS 설정이 되어 있으나, 해당 서버에서는 해당 도메인에 대한 설정 블록이 없다면, 다른 설정파일에서 프록시를 연결해준 서버들 중 하나로 의도치 않게 연결되던 문제가 있었습니다.

더 자세히 말하자면,
1. 프록시 서버는 sub1.example.com, sub2.example.com에 대한 프록시 설정에 대한 파일이 있었는데
2. hellow.example.com, asldfjaslaskdjflksfa.example.com 같은 해당 도메인의 서브도메인으로 HTTP 접속을 하면,
3. 분명히 해당 도메인에 대한 설정파일이 없음에도 sub1.example.com이나 sub2.example.com 서버로 진입이 되고있었습니다.

참고로 nginx는 도커 nginx/alpine 이미지, 1.21.1 버전입니다.

당시 해결하기위해 참고한 공식 매뉴얼의 내용은 아래 링크에 있습니다.

👉 Nginx 공식 매뉴얼 : Miscellaneous names

If it is required to process requests without the “Host” header field in a server block which is not the default, an empty name should be specified:

해당 매뉴얼 내용을 참고해서 다음과 같이 작성했습니다.

conf.d/default.conf

server {
    listen      80 default_server;
    server_name _;
    return      444;
}

server {
    listen      443 default_server ssl;
    server_name _;
    ssl_certificate [ssl_certificate 경로];
    ssl_certificate_key [ssl_certificate_key 경로];
    return 301 http://$server_name$request_uri;
}

매뉴얼에 따르면 catch-all server 라고 불리는 것 같네요.

443 블록의 경우, ssl_certificate과 ssl_certificate_key의 키 경로는 서버에 있는 인증서 파일 중 하나로 한 뒤 http로 리다이렉트 했습니다. 도저히 인증서 없이 nginx에서 443 블록 설정을 하는 방법을 찾지 못해서..

여튼 이렇게 기본 설정파일을 추가해두면 설정되지 않은 도메인에게는 아무런 데이터를 보내지 않습니다.

profile
Web Developer / Read "KEEP CALM CARRY ON" Poster

0개의 댓글