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