Ubuntu 환경에서 uWSGI, Nginx를 사용해서 Django 프로젝트 배포하기

Wsgi, 웹 서버 게이트웨이 인터페이스) (파이썬에서는 Uwsgi라고 함)

  • 소켓이 자동 생성되는데, 요청이 들어왔을 때 자동으로 연결해주는 역할(?)
  • Nginx 와 연결다리 역할(?)

유튜브 영상을 참고하였다가 미친듯한 에러들을 겪었다.

에러문구

2020/12/31 18:15:12 [error] 5214#5214: *1 upstream prematurely closed connection while reading response header from upstream, client: 221.151.46.236, server: _, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://unix:/home/ubuntu/django-eda/myeda/uwsgi.sock:", host: "52.78.60.138", referrer: "[http://52.78.60.138/](http://52.78.60.138/)" "error.log" [readonly] 42L, 11592C

https://github.com/Ting-Kim/Ting-kim.github.io/blob/main/images/20210103_2.png?raw=true

이건 어떻게 해결했는지 기억도 안 나네.. 😱



새로운 마음으로 처음부터 다시 시도..!

느낌이 좋은 곳을 찾아서 이번엔 이 포스팅을 참고하였다.


겪었던 에러


uWSGI 공식 문서


에러 해결 내용(링크 포함)


Ubuntu 명령어

  • pkill -f uwsgi -9
  • ln -s /etc/nginx/sites-available/firstproject /etc/nginx/sites-enabled/
  • apt-get install <package name>
  • cp <fileName> <to_directory> : 파일을 목표 디렉토리에 복사 (이동은 cp 대신 mv)
  • 윈도우에서 리눅스 서버로 파일을 업로드 시키는 방법은 이 링크를 참고하면 된다. 20. Linux - 윈도우와 리눅스 사이 파일 이동 시키기(SCP, SFTP)

  • sudo systemctl start uwsgi : ini 파일들과 함께 uwsgi 가동
  • sudo systemctl enable uwsgi : uwsgi를 service에 등록
  • service uwsgi status
  • service nginx start


uWSGI & Nginx 이용해서 Django 프로젝트 배포 성공

but.. 클릭 몇번에 ⚠504 Gateway timeout 발생

관련하여 참고한 링크는 여기니까 자세한 내용은 여기서 공부합시다!

Gateway

⇒ 서로 다른 네트워크 연결 시 출입구 역할

결국 504 Gateway timeout은 Nginx에서 upstream과의 통신 지연과 관련해서 설정한 시간 제한을 넘기면 발생하는 것이다.

Gateway timeout의 종류는 3가지라고 한다.

  • connect_timeout : upstream 연결 지연 시 발생
  • send_timeout : 프록시 연결 후 데이터 전송 지연 시 발생 (ex. 사용자 파일 업로드 속도가 매우 느림)
  • read_timeout : 대부분의 원인이다. 응답 요청이 정상적이지만 응답 지연 시 발생 요청(request)은 전송된 상태라 upstream과의 연결을 강제로 끊어도 프로세스는 계속 동작한다. (그래서 터미널도 멈추고 AWS 인스턴스 중지도 엄청 오래 걸렸었다..)

해결방법

⇒ 프록시 설정, celery 등 너무 어려워서 일단 시간 제한을 확장시키는 방법으로 해결했다.

  • Proxy_pass
  • uWSGI_pass
  • 내부 처리 시간이 긴 경우 celery를 사용하라는 답변도 있었다.



참고)