[Django]Django + Nginx + Gunicorn 연동하기 2
SW개발/Django

[Django]Django + Nginx + Gunicorn 연동하기 2

지난번 시간에 Django + Gunicorn 을 연동하였으니 이제는 Nginx 도 붙여 하나의 서비스를 하기 위한 준비들을 해볼 것이다.

먼저 Nginx의 특징을 간단하게 알아보고 설치를 진행할 것이다.

 

Nginx 란?

Nginx 웹서버는 러시아의 이고르 시셰프가 개발한 무료 오픈소스 웹서버 소프트웨어다. 

가벼움과 높은 성능을 목표로 하고 웹서버, 리버스 프록시, 메일프록시등의 기능을 가지고 있다.

Nginx

 

Nginx 특징

  • 기존의 웹서버(Apache)는 하나의 쓰레드에서 하나의 클라이언트를 처리함
    ->
    정보를 읽고 쓰고 가공하는데 지연시간이 존재
  • Single Thread 기반으로 context switching 을 하지 않음
  • Nginx는 이벤트 지향 아키텍처(Event-driven Architecture) 방식을 이용함
    -> 메모리 생성속도가 빠름, 더 작은 쓰레드로 훨씬 많은 클라이언트를 처리
  • 환경설정을 바꾸고나서 서버 데몬을 재시작할 필요 없이 리로드 시그널을 보냄
  • 아파치 웹서버가 제공하는 모든기능을 제공 (load balancing, TLS/SSL 보안, 메일프록시)
  • Non blocking event driven 네트워크 통신방식으로 작동

간단하게 Nginix의 특징에 대해 알아보았으니 설치에서부터 설정파일을 구성하는 것까지 해볼 것이다.

 

Nginx 설치

$ sudo apt-get insatll nginx 
# nginx 설치

 

Nginx 버전 확인

$ nginx -V
# nginx 버전 확인

nginx version: nginx/1.12.1

 

Nginx 실행

$ sudo /etc/init.d/nginx start # Nginx 시작

 

Nginx 디렉토리 구조

# /etc/nginx 디렉토리는 아래와 같은 구조로 이루어져 있다

├── conf.d # nginx.conf 에서 불러들일수 있는 설정 파일
├── fastcgi.conf
├── fastcgi_params
├── koi-utf
├── koi-win
├── mime.types
├── nginx.conf # 기본 설정 파일
├── proxy_params
├── scgi_params
├── sites-available # 가상 호스트 설정 파일들 위치
│   └── default
├── sites-enabled
│   └── default -> /etc/nginx/sites-available/default
├── snippets # nginx와 관련된 설정파일 위치
│   ├── fastcgi-php.conf
│   └── snakeoil.conf
├── uwsgi_params
└── win-utf

 

설치를 완료하고나면 위와같은 디렉토리 구조를 가지게 된다. 추후에 이 폴더에 존재하는 파일들을 수정하면서 proxy_pass 기능을 통하여 포트 리다이렉트도 함께 구현할 것이다.

 

Nginx에 대한 설치가 완료되었으면 Django + Gunicorn 에 Nginx 를 붙히는 작업을 할 것이다.

현재는 http://127.0.0.1:포트번호를 통해 장고서버에 접속하게 된다. 이를 http://임의의도메인.com 으로 포트번호 없이 접속하도록 변경해볼 것이다. 이렇게 만드려면 포트 리다이렉트, 그리고 개인 PC의 DNS(도메인) 설정이 필요하다.

(도메인은 업체로부터 구입하여 사용할수도 있지만 연습용으로 자신의 PC에 가상의 도메인을(DNS) 만드는 방법을 이용할 것이다.)

 

PC에 임의의 도메인 설정하기

leffept@Macmini ~ % vi /etc/hosts
# DNS 수정을 위한 파일 열기
# vi /etc/hosts

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       leffept.com # 이부분을 자신의 도메인으로 임의로 설정한다
# 127.0.0.1 이라는 IP 주소를 leffept.com 이라고 정의해주는 뜻
255.255.255.255 broadcasthost
::1             localhost
~

위에서 설명한 것처럼 127.0.0.1 을 leffept.com 이라는 도메인을 자신의 PC 내에서만 강제적으로 mapping 하여 가상의 도메인을 사용할 수 있게 해준다. 이제부터는 http://leffept.com:포트번호 로 접속할 수 있게된 것이다. 실제로 접속이 잘되는 것을 확인할 수 있다.

다음 작업은 Nginx 의 Proxy Pass 기능을 이용하여 포트 리다이렉트를 통해 포트번호를 붙히지 않고도 장고 서버에 접속할 수 있게 변경할 것이다.

 

Nginx Proxy pass 설정하기

# vi /etc/nginx/nginx.conf

http {
	
	# /etc/nginx/conf.d 디렉토리 아래 있는 .conf 파일을 모두 불러옴
	include /etc/nginx/conf.d/*.conf;
}

먼저 nginx.conf 파일을 열어 http 부분의 맨 아래에 위와 같은 줄을 삽입하여 .conf 파일을 읽도록 한다. 프록시 설정에 대한 파일은 /etc/nginx/conf.d/default.conf 라는 경로에 새로 만들어 이용할 예정이다.

 

default.conf 생성

# vi /etc/nginx/conf.d/default.conf

server {
	listen 80;
    server_name leffept.com; 
    
    location/{
    	proxy_pass http://127.0.0.1:8000; 
    }

}

위의 설정파일은 클라이언트가 leffept.com:80/ 주소로 요청하면 127.0.0.1:8000 으로 요청을 대신 보내준다는 의미이다.

따라서 위의 설정을 하게되면 포트번호를 입력하지 않아도 자동으로 8000번 포트로 리다이렉션 시켜준다는 뜻이다.

 

Nginx 재시작

$ sudo service nginx restart

Nginx의 설정파일을 수정하였을 경우 서비스를 재시작 해주어야 올바르게 동작한다.

이 모든 과정을 수행하였다면 장고서버를 동작시키고, 주소창에 leffept.com 이라는 도메인을 입력하면 구축해 두었던 장고 서버에 접속할 수 있게 된다.

 

다음에 다뤄볼 주제는 Django Rest Framework를 이용한 CRUD API 서버 만들기이다.

 

728x90