Comment gérer plusieurs sites django sur Nginx et uwsgi?

est-il possible d'exécuter plusieurs sites django sur le même serveur en utilisant Nginx et uwsgi?

j'ai supposé qu'il était nécessaire d'exécuter plusieurs instances uwsgi (une pour chaque site). J'ai copié /etc/init.d / uwsgi à uwsgi2 et changé le numéro de port. Mais, j'ai eu l'erreur suivante:

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

Comment est-il possible d'exécuter plusieurs instances uwsgi?

Merci

10
demandé sur Thomas 2011-10-30 06:31:41

4 réponses

Vous pouvez créer plusieurs serveurs virtuels qui vous permettent d'héberger plusieurs sites, indépendants les uns des autres. Plus d'info ici:http://wiki.nginx.org/VirtualHostExample.

un peu plus d'informations ici ainsi que sur la façon de configurer les serveurs virtuels http://projects.unbit.it/uwsgi/wiki/RunOnNginx#VirtualHosting.

9
répondu Andres Ilich 2011-10-30 02:38:01

vous pouvez exécuter plusieurs instances d'uwsgi en utilisant Mode Empereur.

ceci gère la création de nouvelles instances de travail. Ces instances sont brillamment et hilairement nommées vassaux. Chaque vassal a juste besoin d'un fichier de configuration qui est habituellement placé (ou en symbiose) dans /etc/uwsgi/vassals

pour nginx vous devrez créer un bloc de serveur pour chaque hôte que vous souhaitez servir. Il suffit de changer le server_name la directive pour chaque hôte que vous voulez servir. Voici un exemple:

#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...
}

Important: assurez-vous d'avoir spécifié vos noms d'hôtes dans /etc/hosts. J'ai découvert que sans cela, mon site django était également servi sur L'IP du serveur par défaut, bien qu'il ait été spécifié qu'il ne devait être servi que sur un nom d'hôte spécifique dans ma configuration nginx.

5
répondu donturner 2013-12-19 12:09:40

je vois beaucoup de suggestions comme la réponse de @donturner. c'est à dire la définition de deux ou plus différents server dans le fichier nginx configure. Mais le problème est que chaque serveur a besoin d'un unique server_name soit différent du nom de domaine ou un nom de sous-domaine. Comment parler de ce genre de situation: je veux serveur deux projet Django comme ceci:

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

De cette façon, nous pouvons configurer tous les paramètres dans un serveur.

C'est mon réglage /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 {
        }
    }

}

C'est mon réglage /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;
    }
}

vous devez aussi changer l'un des projets de Django settings.py fichier STATIC_URL = '/static_lip/', donc deux projets peuvent utiliser leurs fichiers statiques séparément.

Une nouvelle découverte est nginx serveur de fichiers statiques par lui-même. Même si nous fermons uWSGI et Django, nous pouvons également utiliser ces fichiers par le biais d'un navigateur.

2
répondu Belter 2017-06-01 12:10:45

il est en effet possible, découvrez http://www.simme.org/blog/2013/05/08/deploying-your-django-projects-with-uwsgi/ - il une soluce pour le déploiement de django projets via uwsgi + nginx.

-2
répondu simme 2013-05-08 17:14:56