본문 바로가기
코딩/django

[django 서버 배포] connect() failed (111: Unkown error) 해결하기

by JuBro 2024. 2. 11.
Reference
 

AWS EC2에 Django 배포하기(with Gunicorn/Nginx)

소개 AWS EC2에 Gunicorn/Nginx를 사용하여 Django 서버를 배포하는 과정을 다룬다. Django 3.2.7 / WSL2 Ubuntu 환경 / zsh shell 사용

eunche.github.io

 

 

이번 프로젝트에서

django에서 WS는 nginx, WAS는 gunicorn을 이용해 웹 서버를 배포하고 있었다.

그런데 nginx와 gunicorn을 연결시켜주는 데 자꾸 오류가 났다.

 

 

에러로그 확인하는법
tail -f /var/log/nginx/error.log

 

2024/02/07 06:19:25 [error] 16708#16708: *2 connect() failed (111: Unknown error) while connecting to upstream, client: <client IP>, server: <서버 IP> , request: "GET / HTTP/1.1", upstream: "http://1 <서버 IP> /", host: "<서버 IP>"

 

이런 에러가 계속 떠서 내가 해결한 방법은

 

1. 심볼링크 설정시 default 삭제
cd /etc/nginx/sites-enabled/
sudo rm default
sudo ln -s /etc/nginx/sites-available/<프로젝트명>

nginx가 우리 프로젝트 심볼링크를 기본으로 인식하기 위해서,

원래 있었던 default를 삭제하고,

만들었던 site-available을 연결시켜줬다.

 

 

 

2. site-available proxy_pass 수정

 

sudo nano /etc/nginx/sites-available/<프로젝트명> 로 명령어 실행하고

 

server {
        listen 80;
        server_name <서버ip>;

        location = /favicon.ico { access_log off; log_not_found off; }

        location /static {
                alias /home/ubuntu/projects/<프로젝트명>/static;
        }

        location / {
                include proxy_params;
                proxy_pass http://unix:/tmp/gunicorn.sock;
        }
}

 

proxy_pass 에 원래 E2C 서버의 IP 주소를 입력하고 있었는데, ex) proxy_pass http:<서버IP>;

 

proxy_pass 란 nginx가 요청을 전달하는 백엔드 서버를 말하는데, 
나는 django와 gunicorn, nginx를 사용하여 서버를 구축하고 있으므로 바로 django가 아닌, gunicorn(WSGI)을 거쳐 요청이 전달된다. 따라서 여기는 unix 소켓을 써야하므로, 

여기를 프로젝트.sock가 있는 위치로 바꾸니 해결이 되었다.