Try nginx proxy_pass without dns server

2023, May 20    
nginx

problem

  • dns 서버가 없는 환경에서 nginx를 통해 proxy_pass를 외부 도메인주소로호출해야해서 여러가지 방법을 고민해봤습니다.
  • 일반적으로 dmz에 위치한 서버는 보안상 DNS설정을 하지 않기 때문에..여러가지 우회가 필요한 상황이였습니다.
  • ip로 api를 호출하면 403 forbidden으로 리턴받는 상황이였습니다.
  • 참고로 nginx는 일반적으로 /etc/hosts 파일을 직접 참조하지 않습니다. 따라서 dns 서버 없이 외부 도메인 주소를 호출하는 것은 nginx의 기본 기능으로는 지원되지 않습니다.

try1. upstream 활용

upstream chat-api {
    server aaa.com:443;
}

server {
		location ~* ^/(chat|talk) {
         proxy_pass https://chat-api$uri;
    }
}

—> 403 발생 ip로 443을 호출해서 403으로 리턴된 것 같다.

try2. map 활용

map $request_uri $new_uri
{
   /chat/write  https://aaa.com;
}

try3. dnsmasq 활용

https://rougeref.hatenablog.com/entry/2022/06/13/185501

https://qiita.com/yKanazawa/items/2136c4880e8d48370981

단점은 동적으로 hosts파일을 못읽어온다고 한다. 서비스 재시작해야 적용됨

try4. unbound 활용

  • 해보진 않았지만 dnsmasq와 비슷한 dns resolver 툴인 것 같습니다.
  • 무료 오픈소스입니다.
  • 설치하고 nginx에서 해당 DNS Resolver를 참조하도록 설정하면 도메인 이름을 IP 주소로 해석할 수 있게 됩니다.

conclusion