2016-08-24 8 views
0

Ich war schon stundenlang dabei und trotzdem kann ich nicht herausfinden, warum mein Setup nicht funktioniert. Wenn ich den Befehl selbst ausführe, kann ich über meinen Browser auf die Seite zugreifen. Aber wenn ich versuche, es als Dienst auszuführen, bekomme ich ein 502: Schlechtes Gateway.Nginx + Systemd/Systemctl + Django funktioniert nicht (502 schlechtes Gateway)

Ich versuchte zuerst mit Unix Sockets, aber als das nicht funktionierte, steckte ich nur die IP und den Port direkt, immer noch kein Glück.

gunicorn.service:

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

[Service] 
User=username 
WorkingDirectory=/home/username/naomiselect 
Environment="PATH=/home/username/naomiselect/naomienv/bin" 
ExecStart=/home/username/naomiselect/naomienv/bin/gunicorn --workers 3 --bind local_ip:8000 naomiselect.wsgi:application 

[Install] 
WantedBy=multi-user.target 

nginx.conf:

user www-data; 
worker_processes auto; 
pid /run/nginx.pid; 

events { 
    worker_connections 768; 
    # multi_accept on; 
} 

http { 

    ## 
    # Basic Settings 
    ## 

    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 
    # server_tokens off; 

    # server_names_hash_bucket_size 64; 
    # server_name_in_redirect off; 

    include /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    ## 
    # SSL Settings 
    ## 

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE 
    ssl_prefer_server_ciphers on; 

    ## 
    # Logging Settings 
    ## 

    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 

    ## 
    # Gzip Settings 
    ## 

    gzip on; 
    gzip_disable "msie6"; 

    # gzip_vary on; 
    # gzip_proxied any; 
    # gzip_comp_level 6; 
    # gzip_buffers 16 8k; 
    # gzip_http_version 1.1; 
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; 

    ## 
    # Virtual Host Configs 
    ## 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

sites-available/naomiselect:

server { 
    listen 80; 
    server_name local_ip; 

    location = /favicon.ico { access_log off; log_not_found off; } 
    location /static/ { 
     root /home/username/naomiselect; 
    } 

    location/{ 
     proxy_set_header Host $http_host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 
     proxy_pass http://local_ip:8000/; 
    } 
} 

Die Verzeichnisgruppe und Eigentümer sind www-data und Benutzername rekursiv, mit Berechtigungen drwxrwxr-x.

Ich habe keine Ahnung, was ich falsch mache, wenn ich mehrere Tutorials referenzierte und verschiedene Methoden ausprobierte und keine von ihnen funktioniert.

+0

A 502 Antwort bedeutet, dass der Upstream-Server nicht in der Lage ist, verbunden zu werden. Bist du sicher, dass Gunicorn läuft? – jedifans

+0

Ich glaube nicht, dass es überhaupt läuft, nein. Status sagt "exited" anstatt "running" für den Dienst. Nicht sicher, warum es gerade beendet wird. – tayoung

+0

Alles in 'journalctl -xe', warum es beendet wird? – jedifans

Antwort

1

So sagen Sie (in den Kommentaren), dass der Status für gunicorn.service sagt "exited" statt "running", nachdem Sie es starten.

Meistens bedeutet dies einen Service Type= Fehlkonfiguration. Der Standardwert ist Type=simple, der einen Prozess ohne Abzweigung erwartet. Wahrscheinlich Ihre Daemon Gabeln in den Hintergrund nach dem Start, die systemd verwirrt:

Wenn auf simple (der Standard, wenn weder Type= noch BusName=, aber ExecStart= angegeben), wird erwartet, dass der Prozess konfiguriert mit ExecStart = ist der Hauptprozess des Dienstes.

Wenn auf forking gesetzt, wird erwartet, dass der Prozess mit ExecStart= konfigurierte fork nennen() als seinen Anlaufteil. Der übergeordnete Prozess wird voraussichtlich beendet, wenn der Startvorgang abgeschlossen ist und alle Kommunikationskanäle eingerichtet sind.

Also, um diese Hypothese zu überprüfen, führen Sie die Daemon-Binärdatei aus der Shell. Wenn es den Shell sofort freigibt, dann Daemon „Forking“ und Sie müssen die entsprechende Option in der Unit-Datei weitergeben müssen:

[Service] 
Type=forking 
Verwandte Themen