2011-10-30 15 views
9

È possibile eseguire più siti django sullo stesso server utilizzando Nginx e uwsgi?Come eseguire più siti django su Nginx e uwsgi?

Si suppone sia necessario eseguire più istanze uwsgi (una per ciascun sito). Ho copiato /etc/init.d/uwsgi su uwsgi2 e ho cambiato il numero di porta. Ma ho ricevuto il seguente errore:

# /etc/init.d/uwsgi2 start 
Starting uwsgi: /usr/bin/uwsgi already running. 

Come è possibile eseguire più istanze uwsgi?

Grazie

+0

penso che questo sia la stessa domanda a serverfault, http://serverfault.com/questions/498994/how-to-run-multiple-websites-from-one-django-project-on-nginx-and -uwsgi/549337 # 549337 – MrTeera

risposta

9

È possibile creare creare più host virtuali che consentono di ospitare più siti, indipendenti gli uni dagli altri. Maggiori informazioni qui: http://wiki.nginx.org/VirtualHostExample.

Informazioni un po 'più dettagliate qui anche su come configurare host virtuali http://projects.unbit.it/uwsgi/wiki/RunOnNginx#VirtualHosting.

+0

La soluzione per eseguire 2 istanze uwsgi era nel secondo link: uwsgi --uu 1001 -w cliente1app --limit-as 128 -p 3 -M -s 127.0.0.1:3031 – Thomas

+0

Se corri uwsgi in modalità Imperatore, gestirà la creazione di più istanze (ovvero i vassalli). Hai solo bisogno di un file di configurazione uwsgi per ogni progetto django. Maggiori informazioni: https://uwsgi.readthedocs.org/en/latest/tutorials/Django_and_nginx.html#emperor-mode – donturner

-1

è effettivamente possibile, controlla http://www.simme.org/blog/2013/05/08/deploying-your-django-projects-with-uwsgi/ - è una soluzione per lo sviluppo di progetti di django via uwsgi + nginx.

+0

Non è consigliabile pubblicare una risposta con solo un URL alla soluzione al di fuori di stackoverflow.com. Ma puoi usare i link alle fonti per la tua risposta o fare riferimento a ulteriori dettagli. – Alexey

+2

-1 il tuo link non spiega come eseguire più siti django contemporaneamente usando nginx e uwsgi. – HorseloverFat

4

È possibile eseguire più istanze di uwsgi utilizzando Emperor Mode.

Questo gestisce la creazione di nuove istanze di lavoro. Queste istanze sono brillantemente e spiritosamente denominate vassals. Ogni vassallo ha solo bisogno di un file di configurazione che viene solitamente inserito (o collegato simbolicamente) in /etc/uwsgi/vassals

Per nginx è necessario creare un blocco server per ciascun host che si desidera servire. Basta modificare la direttiva server_name per ciascun host che si desidera pubblicare. Ecco un esempio:

#Simple HTTP server 
server { 
    listen 80; 
    root /usr/share/nginx/www; 
    server_name host1.example.com; 
} 

#Django server 
server { 
    listen 80; 
    server_name host2.example.com; 

    #...upstream config... 
} 

Importante: Assicurarsi di aver specificato i nomi di host in /etc/hosts. Ho scoperto che senza fare ciò il mio sito django veniva anche pubblicato sull'IP del server predefinito nonostante specificasse che doveva essere servito solo su un nome host specifico all'interno della mia configurazione di nginx.

1

Vedo molti suggerimenti come la risposta di @ donturner. Ad esempio, imposta due o più diversi server nel file di configurazione di nginx. Ma il problema è che ogni server ha bisogno di un server_name univoco diverso nome di dominio o sottodominio. Che ne dite di questo tipo di situazione: Voglio server a due diversi progetti Django come questo:

www.ourlab.cn/site1/ # first Django project 
www.ourlab.cn/site2/ # second Django project 

In questo modo, siamo in grado di configurare tutte le impostazioni in un server.

Questa è la mia impostazione nel /etc/nginx/nginx.conf

# For more information on configuration, see: 
# * Official English Documentation: http://nginx.org/en/docs/ 
# * Official Russian Documentation: http://nginx.org/ru/docs/ 

user nginx; 
worker_processes auto; 
error_log /var/log/nginx/error.log; 
pid /run/nginx.pid; 

# Load dynamic modules. See /usr/share/nginx/README.dynamic. 
include /usr/share/nginx/modules/*.conf; 

events { 
    worker_connections 1024; 
} 

http { 
    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile   on; 
    tcp_nopush   on; 
    tcp_nodelay   on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 

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

    # Load modular configuration files from the /etc/nginx/conf.d directory. 
    # See http://nginx.org/en/docs/ngx_core_module.html#include 
    # for more information. 
    include /etc/nginx/conf.d/*.conf; 

    server { 
     listen  80 default_server; 
     listen  [::]:80 default_server; 
     server_name _; 
     root   /usr/share/nginx/html; 

     # Load configuration files for the default server block. 
     include /etc/nginx/default.d/*.conf; 

     location/{ 
     } 

     error_page 404 /404.html; 
      location = /40x.html { 
     } 

     error_page 500 502 503 504 /50x.html; 
      location = /50x.html { 
     } 
    } 

} 

Questa è la mia impostazione nel /etc/nginx/conf.d/self_configure.conf

# /etc/nginx/conf.d/self_configure.conf 
server { 
    listen  80; 
    server_name www.ourlab.cn; 

    # note that these lines are originally from the "location /" block 
    root /mnt/data/www/ourlab; 
    index index.php index.html index.htm; 

    location/{ 
     try_files $uri $uri/ =404; 
    } 
    error_page 404 /404.html; 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 

    location ~ \.php$ { 
     try_files $uri =404; 
     fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 

    # Django media 
    location /media { 
     # your Django project's media files - amend as required 
     alias /mnt/data/www/metCCS/metCCS/static/media; 
    } 

    location /static { 
     # your Django project's static files - amend as required 
     # first project's static files path 
     alias /mnt/data/www/metCCS/metCCS/static/static_dirs; 
    } 
    location /static_lip { 
     # second project's static files path 
     alias /mnt/data/www/lipidCCS/lipidCCS/static/static_dirs; 
    } 

    # match www.ourlab.cn/metccs/* 
    location ~* ^/metccs { 
     include  uwsgi_params; 
     uwsgi_pass unix:/run/uwsgi/metCCS.sock; 
    } 
    # match www.ourlab.cn/lipidccs/* 
    location ~* ^/lipidccs { 
     include  uwsgi_params; 
     uwsgi_pass unix:/run/uwsgi/lipidCCS.sock; 
    } 
} 

È inoltre necessario modificare uno dei settings.py lima del progetto Django come STATIC_URL = '/static_lip/', quindi due progetti possono utilizzare i loro file statici separatamente.

Un nuovo risultato è nginx può server file statici di per sé. Anche chiudendo uwsgi e Django, possiamo usare questi file anche attraverso il browser.

Problemi correlati