2016-04-11 28 views
5

Sto implementando il mio primo tentativo di usare django + gunicorn + nginx.Come posso verificare se gunicorn funziona e comunicare con nginx?

  • Ho django working (curl -XGET http://127.0.0.0.1:8000 funziona correttamente se si esegue il server di sviluppo).
  • Ho nginx che funziona per contenuto statico (ad esempio, posso recuperare http://example.com/static/my_pic.png nel mio browser).
  • Non ricevo alcun contenuto wsgi dal mio sito Web e non sono riuscito a trovare una buona guida per la risoluzione dei problemi (funziona solo per tutti gli altri ?!). Comincio gunicorn utilizzando supervisore, che riferisce che è davvero in esecuzione:

(in guscio :)

supervisorctl status my_app 
my_app     RUNNING pid 1002, uptime 0:29:51 

Ecco lo script boilerplate ho usato per avviarlo:

#!/bin/bash 
#script variables 
NAME="gunicorn_myapp"      # Name of process 
DJANGODIR=/webapps/www/my_project   # Django project directory 
SOCKFILE=/webapps/www/run/gunicorn.sock # communicte using this socket 
USER=app_user        # the user to run as 
GROUP=webapps        # the group to run as 
NUM_WORKERS=3 
DJANGO_SETTINGS_MODULE=my_project.settings # settings file 
DJANGO_WSGI_MODULE=my_project.wsgi   # WSGI module name 

# Activate the virtual environment 
cd $DJANGODIR 
source ../bin/activate 
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE 
export PYTHONPATH=$DJANGODIR:$PYTHONPATH 

# Create the run directory if it doesn't exist 
RUNDIR=$(dirname $SOCKFILE) 
test -d $RUNDIR || mkdir -p $RUNDIR 

exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \ 
    --name $NAME \ 
    --workers $NUM_WORKERS \ 
    --user=$USER --group=$GROUP \ 
    --bind=unix:$SOCKFILE 

Ecco il file di configurazione nginx (condensato):

upstream my_server { 
    server unix:/webapps/www/run/gunicorn.sock fail_timeout=10s; 
} 
server { 
     listen 80; 
     server_name www.example.com; 
     return 301 $scheme://example.com$request_uri; 
} 
server { 
    listen 80; 
    server_name example.com; 
    client_max_body_size 4G; 
    access_log /webapps/www/logs/nginx-access.log; 
    error_log /webapps/www/logs/nginx-error.log; 

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

    location /static/ { 
     autoindex on; 
     alias /webapps/www/my_project/my_app/static/; 
    } 

    location /media/ { 
     autoindex on; 
     alias /webapps/www/my_project/my_app/media/; 
    } 

    location/{ 
     proxy_pass   http://my_server; 
     proxy_redirect  off; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto https; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     if (!-f $request_filename) { 
      proxy_pass http://example.com; 
      break; 
     } 
    } 

    location /robots.txt { 
     alias /webapps/www/my_project/my_app/static/robots.txt ; 
    } 
    # Error pages 
    error_page 500 502 503 504 /500.html; 
    location = /500.html { 
     root /webapps/www/my_project/my_app/static/; 
    } 
} 

Quindi: gunicorn è in esecuzione, nginx è in esecuzione ... quali test (e come?) dovrei eseguire per determinare se gunicorn sta facendo la roba wsgi correttamente (e se nginx sta inoltrando correttamente le suddette cose)?

Modifica: ho ridotto il problema alla comunicazione tra gunicorn e nginx tramite il socket unix. Se cambio $ SOCKFILE in modo che sia legato a 0.0.0.0:80 e fermi nginx, le pagine dell'app vengono pubblicate dal mio sito web. La cattiva notizia è che le stringhe del file socket sono esattamente le stesse tra i due file conf, quindi non so perché non stiano comunicando. Suppongo che questo significhi che nginx non sta recuperando e passando i dati correttamente attraverso?

+0

Beh, ti dico vedendo se serve il vostro sito, che si dice non è così. Dov'è la parte della configurazione di nginx in cui viene indicata come proxy tramite il socket $ SOCKFILE? –

+0

Mi dispiace Daniel, ho aggiunto il file di configurazione nginx (commenti rimossi). La voce proxy_pass è ora disponibile. Grazie enormemente per le tue risposte su SE - hanno aiutato a risolvere la maggior parte dei miei problemi di Django nel corso dell'ultimo mese. – Escher

+0

Daniel, su suggerimento ho provato a eseguire il debug di ciò che accade con il socket. Ho modificato con più informazioni; Spero sia utile – Escher

risposta

Problemi correlati