Frage

Ich möchte mehrere virtuelle Hosts über nginx laufen, die jeweils eine andere django app über fcgi dient. Ist das möglich? Wenn ja, hat jemand gute Ressourcen auf, wo / wie Sie anfangen sollen? Die nginx docs scheint meist Beispiele zu sein, aber keiner der besonderen Konfiguration Ich bin versucht ...

War es hilfreich?

Lösung

Es gibt zwei war ziemlich gut Blog-Posts in letzter Zeit über nginx einrichten, aber beide sind mit nginx statisch dienen (oder gecached) Inhalt und Apache + mod_wsgi Django zu dienen. Ich ziehe mich das, weil mod_wsgi Prozessmanagement macht so viel einfacher als fcgi (neben anderen Vorteilen).

Wie auch immer, hier sind die Beiträge:

EDIT: ok grabe ich eine alte TAR-Datei mit meinem nginx out + django + virtuelle Host-Konfigurationsdateien von vor einem Jahr, bevor ich + mod_wsgi Apache geschaltet. Dies war eine Entwicklungsmaschine, so dass Sie wollen # der Arbeitnehmer einzustellen, Verbindungen, 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;
}

So umfasst das Haupt nginx.conf jede Datei im vhosts.d / Unterverzeichnis. Einer meiner Dateien war für PHP auf localhost dienen wie diese (wahrscheinlich phpMyAdmin):

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_string;
        fastcgi_param  REQUEST_METHOD   $request_method;
        fastcgi_param  CONTENT_TYPE     $content_type;
        fastcgi_param  CONTENT_LENGTH   $content_length;
  }
}

Und dann eine lokale Django Entwicklungs-Server wie folgt aus:

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";
  }
}

Schließlich wird jeder der virtuellen Server enthalten eine fastcgi.conf für jeden Standort.

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_string;
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;

Ich bin nicht sicher, ob alle der oben genannten waren erforderlich, aber das war ein anderer einer der Gründe, wechselte ich mod_wsgi ... mehr Support und Dokumentation:)

Andere Tipps

Da diese Frage gestellt wurde jemand ein pip installierbar django Paket erstellt, die eine Apache oder nginx vhost-Datei für Sie von Ihrem settings.py generieren

pip install django-vhost

Überprüfen Sie es hier ansehen: https://bitbucket.org/djangostars/django-vhost

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top