Gunicorn이 생성한 소켓이 없으면 nginx에서 502 오류가 발생합니다.

Gunicorn이 생성한 소켓이 없으면 nginx에서 502 오류가 발생합니다.

수행원이 튜토리얼, Django, Gunicorn 및 nginx를 설정할 수 있었습니다.virtualenv 내부AWS EC2 인스턴스(Ubuntu 16.04 실행)에서 Upstart 파일을 생성하여 전체를 "데몬화"합니다.

virtualenv를 활성화한 후 다음을 확인했습니다.

  1. 장고 작동- 다음을 실행하여 포트 8000을 통해 Django 프로젝트에 액세스할 수 있었습니다.

./manage.py runserver 0.0.0.0:8000

방문했을 때 mydomain.com:8000기본 Django 페이지가 환영을 받았습니다.

  1. Gunicorn은 작동하며 Django 앱을 제공할 수 있습니다.- 내 프로젝트 폴더에서 다음을 실행하여 내 Django 앱에 액세스할 수 있었습니다( projectname실제 프로젝트 이름으로 대체).

gunicorn --bind 0.0.0.0:8000 projectname.wsgi:application

이번에 방문했을 때 mydomain.com:8000다시 웰컴 페이지가 반겨주었고, /adminURL 끝에 추가하면 로그인 화면을 볼 수 있었습니다.마이너스CSS(Gunicorn은 정적 CSS 파일을 인식하지 못하기 때문에 튜토리얼에 따르면 지금은 괜찮습니다).

여기에서 다음 systemd 파일을 생성했습니다( masterfolder모든 작업이 수행되는 폴더를 표시하는 데 사용되는 경우 myuser내 시스템 사용자( ubuntu, Ubuntu 인스턴스이므로)).

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=myuser
Group=www-data
WorkingDirectory=/home/myuser/masterfolder
ExecStart=/home/myuser/masterfolder/myvirtualenv/bin/gunicorn --workers 3 --bind unix:/home/myuser/masterfolder/projectname.sock$

[Install]
WantedBy=multi-user.target`

두 가지 문제가 발생했습니다.

  1. 소켓이 생성되지 않습니다.- nginx 로그 파일을 확인할 때외부도 그렇고 내부도 그렇고virtualenv(왜 같은지 잘 모르겠습니다. btw) 동일한 오류가 발생했습니다.

2017/01/17 15:12:43 [crit] 12403#12403: *3 connect() to unix:/home/myuser/masterfolder/projectname.sock failed (2: No such file or directory) while connecting to upstream

이제 다음을 실행할 때 생성되는 masterfolder폴더 계층 구조와 일치합니다 .django-adminstartproject

masterfolder/ ├── manage.py └── projectname ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py

내부를 들여다보면 masterfolder실제로는.sock 파일이 전혀 없습니다, 라는 이름은 신경쓰지 마세요 projectname.sock.

  1. 따라서 nginx가 작동한다는 사실에도 불구하고 502 오류가 발생합니다.-

etc/nginx/sites-availabe/projectname파일은 다음과 같습니다.

server {
    listen 80;
    server_name www.mydomain.com mydomain.com MYIPADDRESS;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/masterfolder/projectname;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/myuser/mastefolder/projectname.sock;
    }
}

물론 올바르게 심볼릭 링크되어 있으며 모든 변경 후에는 이를 수정하기 위해 다음을 실행합니다.

sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl restart nginx

이 모든 인프라가 함께 작동하는 방식을 이해하는 데 있어 기본적인 내용이 누락된 것 같습니다. 물론 제가 이해한 과정에 오류가 있으면 자유롭게 지적해 주세요.

답변1

디렉토리 의 권한을 확인하셨나요 masterfolder?

권한은 이어야 합니다 myuser:www-data.

또한 nginx 구성 파일에 철자 오류가 있습니다. 오타이길 바랍니다 :)

관련 정보