2009-03-03 10 views
17

मैं nginx के माध्यम से कई वर्चुअल होस्ट चलाने के लिए चाहता हूं, प्रत्येक fcgi के माध्यम से एक अलग django ऐप की सेवा करता है। क्या यह संभव है? यदि हां, तो क्या किसी के पास कहां/कैसे शुरू किया जाए, इस पर अच्छे संसाधन हैं? Nginx दस्तावेज़ ज्यादातर उदाहरण हैं, लेकिन कोई भी विशेष कॉन्फ़िगरेशन मैं कोशिश कर रहा हूं ...dginango के लिए वर्चुअल सर्वर + fcgi कैसे nginx करने के लिए?

उत्तर

30

हाल ही में nginx स्थापित करने के बारे में दो सुंदर ब्लॉग पोस्ट रहे हैं, लेकिन दोनों स्थिर सेवा करने के लिए nginx का उपयोग कर रहे हैं (या कैश किया गया) Django की सेवा के लिए सामग्री और apache + mod_wsgi। मैं इसे स्वयं पसंद करता हूं क्योंकि mod_wsgi प्रक्रिया प्रबंधन को fcgi (अन्य फायदों के अलावा) से इतना आसान बनाता है।

वैसे भी, यहां पोस्ट कर रहे हैं:

संपादित करें: ठीक है मैं एक से मेरी nginx + Django + आभासी मेजबान config फ़ाइलों के साथ एक पुराने टार फ़ाइल खोद एक साल पहले मैं apache + mod_wsgi पर स्विच करने से पहले। यह एक विकास मशीन था, तो आप कार्यकर्ताओं, कनेक्शन की #, आदि भी समायोजित करना चाहेंगे

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

तो, मुख्य nginx.conf में हर फ़ाइल शामिल vhosts.d/उपनिर्देशिका। मेरी फ़ाइलों में से एक स्थानीय होस्ट पर पीएचपी की सेवा के लिए किया गया था (शायद 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; 
    } 
} 

और फिर इस तरह एक स्थानीय Django विकास सर्वर:

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

अंत में, प्रत्येक ओ f वर्चुअल सर्वरों में प्रत्येक स्थान के लिए fastcgi.conf शामिल था।

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; 

मुझे यकीन है कि ऊपर के सभी के लिए आवश्यक थे, लेकिन उस कारण से एक और एक मैं mod_wsgi करने के लिए ... बेहतर समर्थन और प्रलेखन बंद था नहीं कर रहा हूँ :)

+2

मैं इस तरह का काम है, लेकिन आदमी, क्या एक जवाब कभी नहीं छुआ है। –

0

चूंकि यह प्रश्न पूछा गया था किसी को एक पिप स्थापना योग्य Django पैकेज है कि आपके settings.py से आप के लिए एक अपाचे या nginx vhost फ़ाइल उत्पन्न होगा बनाया

pip install django-vhost

यहाँ देखें: https://bitbucket.org/djangostars/django-vhost

संबंधित मुद्दे