[AWS] 3. EC2 입문 : Nginx와 uWSGI

Git 설치, Python 가상환경, MySQL 연동

Featured image

[AWS] 3. EC2 입문 : Nginx와 uWSGI

1. Nginx? uWSGI?

unix socket : 웹 서버(Nginx, Apache 등)와 웹 어플리케이션 서버(uWSGI)를 이어주는 역할로, Nginx와 uWSGI는 같은 컴퓨터 내에서 unix socket으로 소통한다.




2. Nginx를 EC2 서버에 다운받기


(1) nginx 파일 만들기


(2) uwsgi_params 파일 만들기

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

uwsgi의 환경설정을 상수값으로 저장한 파일임.


(3) waffle-backend.conf 채우기

server {
  listen 80;
  server_name _;
  # DNS 등록했다면 server_name www.naver.com;
  location / {
    uwsgi_pass unix://home/ec2-user/waffle-backend_uwsgi.sock;	
    include /home/ec2-user/waffle-rookies-18.5-backend-2/waffle_backend/uwsgi_params;
  }
}

:wq 로 꼭 저장하고 나가기

socket으로 소통하는게 빠름.


(4) nginx.conf에 waffle-backend.conf 불러오기

(엥 왜 sites-available에 만들어놓고 sites-enabled에서 import 해주지? 뒤에 설명이 나온다.)

nginx.conf 파일




3. uWSGI 설정하기

(1) 파이썬 가상환경 하에서 설치하기


(2) uwsgi 설정 이해하기 (중요!)

[uwsgi]
# Django-related settings
# base directory
chdir = /home/ec2-user/waffle-rookies-18.5-backend-2/waffle_backend
module = waffle_backend.wsgi:application

# virtualenv
home = /home/ec2-user/.pyenv/versions/waffle-backend
virtualenv = /home/ec2-user/.pyenv/versions/waffle-backend

socket = /home/ec2-user/waffle-backend_uwsgi.sock
chmod-socket = 666

# process-related settings
master = true
processes = 4
enable-threads = true
pidfile = /tmp/waffle-backend_uwsgi.pid

vacuum = true
daemonize = /home/ec2-user/waffle-backend_uwsgi.log
lazy-apps = true

buffer-size = 65535
max-requests = 500


(3) “왜 sites-available에 만들어놓고 sites-enabled에서 import 해주지?” 에 대한 대답

sudo ln -s /etc/nginx/sites-available/waffle-backend.conf /etc/nginx/sites-enabled/waffle-backend.conf



4. nginx 권한 부여 및 연결 테스트하기

nginx test 실패

/etc/nginx/sites-enabled/waffle-backend.conf의 7번째 줄에서 uwsgi_parmas를 제대로 불러오지 못하고 있다는 에러 메시지가 나왔다. 사실 2.(2) 단계에서 uwsgi_params 파일을 생성하지 않으면 해당 메시지가 뜬다. 제대로 생성했다면 뜨지 않는 것이 정상!


uwsgi --ini /home/ec2-user/waffle-rookies-18.5-backend-2/waffle_backend/waffle-backend_uwsgi.ini

백그라운드에서 uwsgi 실행시키기

nginx 실행