2009-03-03 9 views
17

Chciałbym uruchomić kilka wirtualnych hostów za pośrednictwem nginx, z których każdy obsługuje inną aplikację django za pośrednictwem fcgi. czy to możliwe? Jeśli tak, czy ktoś ma dobre zasoby dotyczące tego, gdzie i jak zacząć? Dokumenty nginx wydają się być głównie przykładami, ale żadna z konkretnych konfiguracji, których próbuję ...jak do serwerów wirtualnych nginx + fcgi dla django?

Odpowiedz

30

Ostatnio pojawiły się dwa całkiem dobre posty na blogu dotyczące konfigurowania nginx, ale oba używają nginx do wyświetlania statycznego (lub buforowana) zawartość i apache + mod_wsgi do obsługi Django. Preferuję to sam, ponieważ mod_wsgi sprawia, że ​​zarządzanie procesami jest o wiele łatwiejsze niż fcgi (między innymi zaletami).

W każdym razie, oto posty:

EDIT: OK, I wykopali stary plik tar z moich nginx + django + wirtualnych plików hosta konfiguracyjnych od A rok temu, zanim przełączyłem się na apache + mod_wsgi. Była to maszyna rozwój, więc będziemy chcieli, aby dostosować # pracowników, przyłączy itp

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

Więc, głównym nginx.conf obejmuje każdy plik w vhosts.d/podkatalog. Jeden z moich plików był na służbie PHP na localhost (prawdopodobnie działa phpMyAdmin) tak:

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

A potem lokalny serwer rozwoju Django tak:

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

końcu, każdy o f serwery wirtualne zawierały fastcgi.conf dla każdej lokalizacji.

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; 

nie jestem pewien wszystkie powyższe były wymagane, ale to jeszcze jeden z powodów, dla których włączane do mod_wsgi ... lepsze wsparcie i dokumentację :)

+2

nigdy nie dotknęła tego rodzaju pracy, ale człowiek, co odpowiedzieć. –

Powiązane problemy