nginx 개념 따라잡기

1대의 pc에서 여러개의 도메인으로 구성된 웹 서비스가 가능할까요?

이 물음에 대한 답 중 하나인 nginx 를 소개합니다.

nginx 는 apache 와 같은 web server 입니다.

여기서는 nginx가 무엇이며 왜 사용하는지 알려 드립니다.
( 개발/설치방법에 대한 내용은 일절 다루지 않습니다 )

발단

당신은 욕심이 많은 사람입니다. 한대의 서버에 여러개의 블로그를 운영하고 싶습니다.

다행히도 당신은 똑똑해서 개발에 대한 지식이 있고 공유기도 다룰 줄 압니다.

계획을 세웁니다.

127.0.0.1 : 1000 은 홈페이지로,
127.0.0.1 : 2000 은 위키로,
127.0.0.1 : 3000 은 블로그로 운영하고 싶습니다.

* 127.0.0.1 은 localhost 입니다

우여곡절 끝에 집에 남는 pc에 3개의 was 를 설치했습니다.

이제 사이트를 웹에 오픈하여 자랑하고 싶습니다.

모든 사이트는 다른 도메인으로 서비스하고 싶습니다.

근데 서버 pc는 한대입니다. 물론 pc 에 연결된 ip 도 한개입니다.

즉 당신은 한대의 pc로 여러개의 홈페이지를 운영하고 싶은 상태입니다.

전개

4개의 도메인을 운영하는 시나리오로 진행해 보겠습니다.

1.2.3.4 주소를 가진 pc에 4개의 was 구성했습니다. 각 was는 다른 포트로 구성되어서 내부망을 통해서 확인까지 마쳤습니다.

위와 같이 도메인을 구입해서 서버 pc에 연결합니다.
( 편의상 pc의 ip는 1.2.3.4 로 하겠습니다 )

이제 세계 각지에서 4명의 사용자가 아래와 같은 주소로 접속합니다.

user A : blog.devbit.co.kr
user B : wiki.devbit.co.kr
user C : devbit.co.kr
user D : www.devbit.co.kr

4명 모두 1.2.3.4 라고 연결된 저의 서버 pc로 들어오게 됩니다.

근데 4명은 같은 사이트를 보려고 온게 아닙니다. A는 블로그를, B는 위키를 보려고 접속하는 것이죠. 근데 향하는 ip는 모두 동일한 하나의 pc입니다.

어떻하면 될까요?

결과부터 말씀드리자면 nginx 를 웹서버로 설치해서 외부에서 들어온 domain 에 따라 내부 ip 로 포워딩시키면 해결됩니다.

절정

그림은 nginx를 통해 외부에서 접속한 각 도메인이 내부 ip 까지 도달하는 과정을 간략히 설명하고 있습니다.

  1. blog.devbit.co.kr -> 127.0.0.1 : 2000
  2. wiki.devbit.co.kr -> 127.0.0.1 : 3000
  3. devbit.co.kr, www.devbit.co.kr -> 127.0.0.1 : 1000

1번은 1개의 도메인과 1개의 서버가 연결되었습니다.

3번은 2개의 도메인과 1개의 서버가 연결되었네요.

요약하자면 was 서버당 n개의 외부 도메인을 연결시키고 있습니다.

여기까지 보시고 nginx 의 기능이 공유기의 포트포워딩 기능과 흡사하다는 걸 눈치채신 분 계신가요?

이처럼 nginx는 각자 다른 도메인 주소로 접속된 것들을 내부( 혹은 외부 )의 각 서버로 안내하는 역할입니다.

간단한 코드처럼 표현하자면

if( 외부도메인 == blog.devbit.co.kr )
{
	127.0.0.1 : 2000 로 연결;
}
if( 외부도메인 == wiki.devbit.co.kr )
{
	127.0.0.1 : 3000 로 연결;
}
if( 외부도메인 == devbit.co.kr || 외부도메인 == www.devbit.co.kr )
{
	127.0.0.1 : 1000 로 연결;
}

이렇게 쓰여진다고 보시면 됩니다.
( 외부에서 접근된 도메인 문자열로 분기를 시켜서 다른 서버로 연결시키는데 이걸 proxy pass 라 합니다 )

보통 내부에 여러개의 was를 구동시킬 경우 사용하는데 외부망으로도 연결할 수 있습니다.

이렇게 하면 1대의 서버에서 n개의 웹 서비스가 가능해집니다.

결말

nginx 는 높은 생산성과 낮은 유지보수 비용으로 익혀 두면 아주 좋은 기술이라 생각합니다.

Subscribe to X세대 신입사원

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe
774-86-01972 cinnabar.3d@gmail.com