탕구리's 블로그

Nginx는 무슨 역할을 할까? - with willson 본문

Server

Nginx는 무슨 역할을 할까? - with willson

탕구리당 2019. 7. 18. 01:51
반응형

WillSon에서는 왜 nginx를 사용했나요?

 

willson을 처음 설계 할 때  총 3개의 서버를 이용하려고 했어요. API 서버, Push 서버 그리고 socket.io를 이용할 chatting 서버 입니다. chatting 서버는 결국 firebase로 대체하기로 했지만 실시간 통신 관련해서 개발해보고 싶었는데 약간 아쉬움이 남아요. 불필요한 이야기는 각설하고 본론으로 들어가 봅시다.

 

AWS를 이용해서 서버를 구축했기 때문에 다양한 서비스를 이용하게 되면 추가적인 비용이 발생하게 되요. 그래서 생각한게 클라이언트에서 API에 대한 요청이 들어오면 각 API에 대해 적절한 서버로 redirect 시켜주는 방법을 이용하기로 했어요. 물론 API gateway를 사용한다거나 ALB(application load balancing)를 이용해서 forwarding 혹은 redirection 시켜주는 방법으로도 사용이 가능 할 꺼라 생각은 해봤는데 급하다 보니까 평소에 자주 사용하던 방법대로 진행을 하게 되었어요.

 

 

 

Nginx는 무엇일까요? 

 

Nginx는 웹서버 입니다. 간단하게 웹서버는 클라이언트로 부터 요청이 발생했을 때 요청에 맞는 정적파일을 보내 주는 역할을 합니다. Nginx는 규모가 작은 서비스이면서 정적 데이터 처리가 많은 서비스에 적합합니다. 

 

Nginx는 일반적인 HTTP의 웹서버의 역할 외에도 proxy, reverse proxy 서버의 역할 또한 가능합니다. 양대산맥인 Apache와 두드러지게 다른 특징을 가지고 있는데요. Apache는 MPM(multi Processing Module: 다중 처리 모듈) 방식을 사용하는 반면, Nginx는 Event driven 방식을 통해 구동 됩니다. Event driven은 Node.js에서도 사용하는 방식이죠? (자세한 내용이 궁금하다면 여기 를 방문해 주세요) 이러한 장점은 메모리를 좀 더 효율적으로 운용할 수 있는 결과를 가져옵니다.

 

 

 

Nginx Reverse Proxy 설정하기

 

nginx에서는 기본적으로 conf.d 디렉터리에 있는 *.conf 파일을 include 하도록 설정되어 있습니다. 그래서 제가 작성한 configure 파일은 /etc/nginx/conf.d/ 에 위치합니다.

 

$ vi /etc/nginx/conf.d/test.conf

server {

       // 우선 proxy에서 사용할 포트를 설정합니다.
        listen 80; 

       // 서버의 도메인이나, 아이피 주소를 작성해주시면 됩니다.
        server_name willson.co.kr; 

 

       // willson.co.kr/docs 로 요청이 온 경우 github에 존재하는 api 문서를 확인할 수 있도록 301 redirection을 해주었습니다.
        location /docs {
                return 301 https://github.com/willson-appjam/willson-server/blob/develop/willson_api_reference.md;
        }

 

       // willson.co.kr/api 로 요청이 온 경우 local에 존재하는 3000번 포트로 프록시 해줍니다.
        location /api {

            

                // 업스트림으로 연결되는 도중 error나 timeout, invalid_header, http 오류 등이 발생하면 요청을 포기합니다.
                proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

 

               // 각 종 헤더를 설정할 수 있습니다.
                proxy_set_header Host $host;

                prxoy_set_header X-Real-IP $remote_addr

 

               // 타임 아웃에 대한 설정해 진행합니다.
                proxy_connect_timeout 300;
                proxy_send_timeout 300;
                proxy_read_timeout 300;
                send_timeout 3000;

 

               // 프록시 대상 경로를 설정해 줍니다.

                proxy_pass http://localhost:3000/api;

        }

 

      location / {

         

      }

      

      // 404 페이지와 같이 웹서버의 기능인 정적파일을 제공하기도 합니다.

      error_page 404 = /error_404.html


}

 

프록시 옵션에 대한 설정은 여기에 매우 상세하게 잘 설명해 주셨습니다.

좀 더 자세한 내용은 Nginx Document를 참조하면 많은 도움이 될 것 같습니다.

 

긴 글 읽어주셔서 감사합니다 :)

반응형
Comments