본문 바로가기
Python

[파이썬으로 웹개발] 플라스크 NGINX 서버를 우분투 18.04에 설치하기

by 돈민찌 2021. 10. 1.
반응형

출처 디지털오션(difitalocean.com)

NGINX는 세계에서 가장 인기있는 웹서버다. whatruns 같은 크롬 익스텐션을 사용해보면 상당히 많은 수의 웹사이트가 이 서버를 사용해 웹사이트를 배포하고 있다는 것을 알 수 있다. 따라서 플라스크를 사용하지 않더라도 배워두면 쓸모 있는 기술이다. 대표적으로 사용하는 Apache나 Tomcat 보다 리소스 친화적이라고 한다. (그게 무슨 말인지는 나도 모르는게 비밀)

AWS에서 우분투 18.04(이 글은 당연히 정확히 이 버전에만 해당) 인스턴스를 만들고 키 파일을 발급받아, 윈도우즈의 경우 ssh -i <받은 키파일을 Bash로 드래그> ubuntu@<인스턴스IP>를 입력하면 우분투에 접속할 수 있다. 키파일은 뜻을 알 수 없는 텍스트 쪼가리일 뿐이지만 실수로라도 깃에 업로드하거나 타인에게 노출되면 당신의 서버를 자기것처럼 드나들 수 있는 중요한 열쇠니까 잘 보관하도록 한다.

이렇게 받은 ubuntu 인스턴스는 nginx를 기본 리포지토리에서 사용할 수 있으니 apt install 시스템을 통해서 nginx를 설치하도록 한다.

sudo apt update
sudo apt install nginx

그리고 이제 방화벽을 열고 닫는 것을 익혀야 한다. 먼저 우리가 사용할 수 있는 프로필들을 조회해 본다.

sudo ufw app list

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

이렇게 사용할 수 있는 프로필들이 출력될 것이다.

Nginx Full은 80번 포트와 443포트 모두를.
Nginx HTTP는 80번 포트,
Nginx HTTPS는 443번 포트를,
OpenSSH는 처음에 우분투를 접속할 때 사용한 ssh를 열고 닫는데 사용한다.

이것을 미리 설명하는 이유는 본인이 이걸 몰라서 OpenSSH까지 포함해 모든 방화벽을 실행하는 바람에, 인스턴스가 타임아웃으로 종료되었을 때 다시 접속하는 통로를 스스로 막아버려 몇번이나 같은 실수를 반복한 경험이 있어서이다...ㅎㅎ

sudo ufw enable
yes

sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'OpenSSH'
sudo ufw status

이렇게 입력하면, 이런 창을 보게 될 것이다.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

그러면 잘 따라오고 있는 것이다. active가 아니라면 첫번째 줄부터 다시 입력해 보도록 한다.

systemctl status nginx

이것도 역시 확인해봐야 한다. 똑같이 active에 불이 들어오면 잘 따라오고 있는 것이다.

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
curl -4 icanhazip.com

위 명령을 입력하면 IP주소처럼 보이는 것과 영문자로 이뤄진 문자열을 받게 될 것이다. 각 주소를 http 프로토콜로 브라우저에 입력해보자 아마 Nginx 웰컴 페이지가 나타날 것이다. 역시 잘 따라오고 있다는 뜻이다.

sudo systemctl stop nginx
sudo systemctl start nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl disable nginx
sudo systemctl enable nginx

각각 nginx 서버를 중지할 때, 시작할 때, 다시 시작할 때, 그리고 리로딩할 때. 또 서버 부팅 시 nginx가 함께 자동으로 실행되는 것을 on할지 off로 둘지 선택하는 명령문이다. 긍정 명령문을 모두 부정명령문보다 뒤에 있게 위치했으니 여섯줄을 한번에 입력해도 문제없이 다음 단계로 넘어갈 수 있을텐데, 각각 한줄씩 실험해보아도 좋다. 리눅스는 뭔가 잘 명령했을 때는 보통 조용하다. 

catminzzi.shop 부분은 사용하고자 하는 저렴한 도메인(가비아의 .shop이나 freenom의 무료 도메인 사용)으로 대체해서 사용해보자

상위 디렉토리를 생성한다.

sudo mkdir -p /var/www/catminzzi.shop/html

해당 디렉토리의 소유권을 할당한다.

sudo chown -R $USER:$USER /var/www/catminzzi.shop/html

 

소유권 권한을 확인해본다.

sudo chmod -R 755 /var/www/catminzzi.shop

nano 편집기를 이용해 index.html을 만들어본다.
(nano 외에도 gedit, vim 등이 있는데 nano가 편한 것 같다.)

nano /var/www/catminzzi.shop/html/index.html

내용은 이렇게 쓴다.

<html>
    <head>
        <title>Welcome to catminzzi.shop!</title>
    </head>
    <body>
        <h1>Success!  The catminzzi.shop server block is working!</h1>
    </body>
</html>

NGINX 서버에서 이 Html을 제공하려면 이것을 가르키는 지시가 있어야 한다. 파일을 만든다.

sudo nano /etc/nginx/sites-available/catminzzi.shop
server {
        listen 80;
        listen [::]:80;

        root /var/www/catminzzi.shop/html;
        index index.html index.htm index.nginx-debian.html;

        server_name catminzzi.shop www.catminzzi.shop;

        location / {
                try_files $uri $uri/ =404;
        }
}

이 파일의 바로가기 파일을 sites-enabled라는 폴더에 만들어줘야 한다.

sudo ln -s /etc/nginx/sites-available/catminzzi.shop /etc/nginx/sites-enabled/

링크를 연결해주면서 server_name에 기입한 example.com과 www.example.com을  을 기반으로 요청에 응답하게 됩니다. 같은 디렉토리 내에 default 파일이 있는데, example.com 파일처럼 특정한 server_name 접속이 아닌 요청은 default 파일이 모두 처리합니다. (건드리지 않는 것이 좋다는 뜻)

sudo nano /etc/nginx/nginx.conf

해당 파일의 server_name_hash_bucket_size 지시문을 찾아 주석 처리에 쓰인 #을 제거합니다.

...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

저장하고 닫습니다. nginx 파일의 구문 체크를 위해 다음 명령을 실행합니다.

sudo nginx -t

문제가 발생하지 않으면 nginx를 다시 실행합니다.

sudo systemctl restart nginx

이제 nginx가 도메인에 연결됩니다. 준비했던 도메인으로 http 접속을 하면 다음과 같은 결과물이 나옵니다.

과정 중에 오류가 발생했는데 지나친 것이 있다면,

  • /var/log/nginx/access.log: Nginx가 다르게 구성되지 않는 한 웹 서버에 대한 모든 요청은 이 로그 파일에 기록됩니다.
  • /var/log/nginx/error.log: 모든 Nginx 오류가 이 로그에 기록됩니다.

이 두 곳에서 확인이 가능합니다. 다음 글에서는 wsgi를 이용해 https 서버를 구축하는 것을 보겠습니다.

 

이 글은 digitalocean.com의 이 게시물을 번역하고 수정한 게시물입니다. 제가 시도해본 결과에 따라 약간의 수정이 있으니 원본 글 링크를 남겨둡니다.

 

How To Install Nginx on Ubuntu 18.04 | DigitalOcean

Nginx is one of the most popular web servers in the world and is responsible for hosting some of the largest and highest-traffic sites on the internet. It is more resource-friendly than Apache in most cases and can be used as a web server or reverse p

www.digitalocean.com

요리사로 일할 때 "혼자 요리하는 요리사는 없다"라는 말을 자주 들었는데, 다 스스로 생각한 레시피라고 생각하더라도 그 중에 전통적으로 내려온 방식이나 비법이 녹아있지 않은 요리가 없다는 뜻으로 통했습니다. 개발을 하면서 코드 역시 혼자 쓰는 코드는 없다는 생각을 하게 됩니다. 글 쓰는 과정에서 많은 도움이 된 원저작자와 다른 블로거 분들에게 감사인사를 전합니다.

https://velog.io/@yvvyoon/flask-nginx-gunicorn-1

 

Flask + Nginx + Gunicorn (1/3)

Green Unicorn의 줄임말로서 Ruby 진영의 Unicorn에서 포팅된 Unix 전용 파이썬 WSGI HTTP 서버이다. Gunicorn 팀에서 Nginx와 함께 사용하도록 권장하고 있다.8000번 포트로 구동되고 의존성이 없으며, Nginx는 일

velog.io

 

반응형

댓글