2011-10-30 29 views
9

¿Es posible ejecutar múltiples sitios django en el mismo servidor usando Nginx y uwsgi?¿Cómo ejecutar múltiples sitios django en Nginx y uwsgi?

Supongo que es necesario ejecutar varias instancias de uwsgi (una para cada sitio). Copié /etc/init.d/uwsgi a uwsgi2 y cambié el número de puerto. Pero obtuve el siguiente error:

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

¿Cómo es posible ejecutar varias instancias uwsgi?

Gracias

+0

Creo que esta es la misma cuestión en serverfault, http://serverfault.com/questions/498994/how-to-run-multiple-websites-from-one-django-project-on-nginx-and -uwsgi/549337 # 549337 – MrTeera

Respuesta

9

Puede crear crear múltiples máquinas virtuales que le permiten alojar múltiples sitios, independientes unos de otros. Más información aquí: http://wiki.nginx.org/VirtualHostExample.

Aquí encontrará información un poco más detallada sobre cómo configurar hosts virtuales http://projects.unbit.it/uwsgi/wiki/RunOnNginx#VirtualHosting.

+0

La solución para ejecutar 2 instancias de uwsgi estaba en el segundo enlace: uwsgi --uid 1001 -w cliente1app --limit-as 128 -p 3 -M -s 127.0.0.1:3031 – Thomas

+0

Si ejecuta uwsgi en modo Emperador, se encargará de la creación de instancias múltiples (también conocidos como vasallos). Solo necesita un archivo de configuración uwsgi para cada proyecto django. Más información: https://uwsgi.readthedocs.org/en/latest/tutorials/Django_and_nginx.html#emperor-mode – donturner

-1

es de hecho posible, consulte http://www.simme.org/blog/2013/05/08/deploying-your-django-projects-with-uwsgi/ - es un tutorial para el despliegue de proyectos de django a través de uwsgi + nginx.

+0

No se considera bueno publicar una respuesta con solo una URL a la solución fuera de stackoverflow.com. Pero puede usar enlaces a las fuentes para su respuesta o consultar más detalles. – Alexey

+2

-1 su enlace no explica cómo ejecutar múltiples sitios django simultáneamente usando nginx y uwsgi. – HorseloverFat

4

Puede ejecutar varias instancias de uwsgi usando Emperor Mode.

Esto maneja la creación de nuevas instancias de trabajador. Estas instancias se llaman de manera brillante e hilarante vassals. Cada vasallo solo necesita un archivo de configuración que generalmente se coloca (o enlazado) en /etc/uwsgi/vassals

Para nginx, deberá crear un bloque de servidor para cada host que desee atender. Simplemente cambie la directiva server_name para cada host que desee atender. He aquí un ejemplo:

#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: Asegúrese de que ha especificado los nombres de host en /etc/hosts. Descubrí que, sin hacer esto, mi sitio django también se publicaba en la IP del servidor predeterminado a pesar de que especificaba que solo se publicaría en un nombre de host específico dentro de mi configuración de nginx.

1

Veo muchas sugerencias como la respuesta de @ donturner. es decir, establecer dos o más server diferentes en el archivo de configuración de nginx. Pero el problema es que cada servidor necesita un único server_name ya sea un nombre de dominio o un nombre de dominio diferente. ¿Qué hay de este tipo de situación: Quiero servidor de dos proyectos Django diferente como esto:

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

De esta manera, podemos configurar todos los ajustes en un servidor.

Esta es mi configuración en /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 { 
     } 
    } 

} 

Esta es mi configuración en /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; 
    } 
} 

También es necesario cambiar una de expediente del proyecto de Django settings.py como STATIC_URL = '/static_lip/', por lo que dos proyectos pueden utilizar sus archivos estáticos por separado.

Un nuevo hallazgo es nginx puede servidor de archivos estáticos por sí mismo. Incluso cerramos uwsgi y Django, también podemos usar estos archivos a través del navegador.

Cuestiones relacionadas