comment nginx serveurs virtuels + fcgi pour django?

Je voudrais lancer plusieurs hôtes virtuels via nginx, chacun servant une application django différente via fcgi. Est-ce possible? Si oui, est-ce que quelqu’un a de bonnes ressources sur où et comment commencer? Les docs de nginx semblent être principalement des exemples, mais aucun de la configuration particulière que je tente …

Il y a eu récemment deux très bons articles sur la configuration de nginx, mais les deux utilisent nginx pour servir du contenu statique (ou mis en cache) et apache + mod_wsgi pour servir Django. Je préfère cela parce que mod_wsgi rend la gestion des processus beaucoup plus facile que fcgi (entre autres avantages).

En tout cas, voici les messages:

  • L’almanach intrépide de Django et Ubuntu
  • django, nginx, memcached – le sortingo dynamic

EDIT: ok j’ai creusé un vieux fichier tar avec mes fichiers de configuration nginx + django + hôte virtuel il ya un an avant de passer à apache + mod_wsgi. C’était une machine de développement, donc vous voudrez ajuster le nombre de travailleurs, les connexions, etc.

nginx.conf:

user nginx nginx; worker_processes 2; error_log /var/log/nginx/error_log info; events { worker_connections 1024; use epoll; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 4 2k; request_pool_size 4k; gzip on; gzip_min_length 1100; gzip_buffers 4 32k; gzip_types text/plain text/html application/x-javascript text/xml text/css; output_buffers 4 32k; postpone_output 1460; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 75 20; ignore_invalid_headers on; include vhosts.d/*.conf; } 

Ainsi, le fichier nginx.conf principal inclut tous les fichiers du sous-répertoire vhosts.d /. Un de mes fichiers était pour servir PHP sur localhost (exécutait probablement phpMyAdmin) comme ceci:

vhosts.d / 00_localhost:

 server { listen 127.0.0.1:80; server_name localhost; access_log /var/log/nginx/localhost.access_log main; error_log /var/log/nginx/localhost.error_log info; root /var/www/localhost/htdocs; index index.php index.html index.htm; location ~ .php$ { fastcgi_pass 127.0.0.1:8888; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/localhost/htdocs$fastcgi_script_name; fastcgi_param QUERY_STRING $query_ssortingng; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; } } 

Et puis un serveur de développement local Django comme celui-ci:

50_django.local:

 server { listen 80; server_name django.local; access_log /var/log/nginx/django.access.log main; error_log /var/log/nginx/django.error.log info; root /var/www/django.local; location ~* ^.+\.(mpg|avi|mp3|swf|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt|tar|mid|midi|wav|rtf|mpeg)$ { access_log off; break; } location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|bmp|js)$ { expires 30d; break; } location / { fastcgi_pass unix:/var/www/django.local/server.sock; include fastcgi.conf; } location ^~ /admin/ { fastcgi_pass unix:/var/www/django.local/server.sock; include fastcgi.conf; access_log off; auth_basic "Welcome to admin"; } } 

Enfin, chacun des serveurs virtuels comprenait un fichier fastcgi.conf pour chaque emplacement.

fastcgi.conf:

 fastcgi_pass_header Authorization; fastcgi_intercept_errors off; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_ssortingng; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param SERVER_NAME $server_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param REMOTE_USER $remote_user; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_SOFTWARE "nginx"; fastcgi_param GATEWAY_INTERFACE "CGI/1.1"; fastcgi_param UID_SET $uid_set; fastcgi_param UID_GOT $uid_got; 

Je ne suis pas sûr que tout ce qui précède était nécessaire, mais c’était une autre des raisons pour lesquelles je suis passé à mod_wsgi … un support et une documentation supérieurs 🙂

Depuis que cette question a été posée, quelqu’un a créé un paquet django installable par pip qui va générer un fichier apache ou nginx vhost à partir de vos parameters.py

pip install django-vhost

Consultez-le ici: https://bitbucket.org/djangostars/django-vhost