Wenn kein Socket von Gunicorn erstellt wird, wirft Nginx den Fehler 502

Wenn kein Socket von Gunicorn erstellt wird, wirft Nginx den Fehler 502

Gefolgtdieses Tutorial, ich konnte Django, Gunicorn und nginx einrichteninnerhalb einer virtuellen Umgebungauf einer AWS EC2-Instanz (mit Ubuntu 16.04) und fahren Sie dann mit der Erstellung einer Upstart-Datei fort, um das Ganze zu „daemonisieren“.

Nachdem ich die virtuelle Umgebung aktiviert hatte, habe ich Folgendes überprüft:

  1. Django funktioniert- Ich konnte über Port 8000 auf mein Django-Projekt zugreifen, indem ich Folgendes ausführte:

./manage.py runserver 0.0.0.0:8000

Bei meinem Besuch mydomain.com:8000wurde ich von der Standard-Django-Seite begrüßt.

  1. Gunicorn funktioniert und kann die Django-App bedienen– Ich konnte auf meine Django-App zugreifen, indem ich dies aus dem Ordner meines Projekts ausführte (ersetzen Sie es projectnamedurch meinen tatsächlichen Projektnamen):

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

Bei meinem mydomain.com:8000nächsten Besuch wurde ich wieder von der Willkommensseite begrüßt und als ich /adminam Ende der URL anfügte, konnte ich den Anmeldebildschirm sehenMinusdas CSS (weil Gunicorn die statischen CSS-Dateien nicht kennt, was laut Tutorial vorerst in Ordnung ist).

Von hier aus habe ich mit der Erstellung der folgenden systemd-Datei begonnen (wobei masterfolderverwendet wird, um den Ordner anzuzeigen, in dem die gesamte Aktion stattfindet; dies myuserist mein Systembenutzer ( ubuntu, da dies eine Ubuntu-Instanz ist):

[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`

Ich bin auf zwei Probleme gestoßen:

  1. Es wird kein Socket erstellt- beim Überprüfen der Nginx-Protokolldateienaußen wie innenin der virtuellen Umgebung (ich bin mir übrigens nicht ganz sicher, warum sie gleich sind) habe ich den gleichen Fehler gesehen:

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

Beachten Sie nun, dass dies masterfoldermit der Ordnerhierarchie übereinstimmt, django-admindie erstellt wird, wenn ich Folgendes ausführe startproject:

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

Wenn man hineinschaut, masterfoldergibt es tatsächlichüberhaupt keine .sock-Datei, ganz zu schweigen von einem mit dem Namen projectname.sock.

  1. Daher wirft nginx trotz der Tatsache, dass es funktioniert, einen 502-

So etc/nginx/sites-availabe/projectnamesieht meine Datei aus:

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;
    }
}

Es ist natürlich korrekt als symbolischer Link verknüpft und nach jeder Änderung, die ich vornehme, um das Problem zu beheben, führe ich Folgendes aus:

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

Ich habe das Gefühl, dass mir hier etwas Grundlegendes fehlt, wenn es darum geht, wie diese gesamte Infrastruktur zusammenarbeitet. Sie können mich natürlich gerne auf Fehler in meinem Verständnis des Prozesses hinweisen.

Antwort1

Haben Sie die Berechtigungen des masterfolderVerzeichnisses überprüft?

Die Berechtigungen sollten sein myuser:www-data.

Außerdem ist in Ihrer Nginx-Konfigurationsdatei ein Rechtschreibfehler. Ich hoffe, das ist ein Tippfehler:)

verwandte Informationen