2011-12-06 20 views
2

我的Django的FastCGI/nginx的在OS X上工作很好,我從終端開始我的FastCGI進程像這樣:開始Django的FastCGI的時候自動OS X的靴子

python manage.py runfcgi host=127.0.0.1 port=8000 --settings=settings 
在我的nginx.conf文件

我有:

server { 
    listen  8080; 
    server_name localhost; 
    location/{ 
     fastcgi_pass 127.0.0.1:8000; 

我有nginx自動啓動使用launchd作爲詳細的here

我的問題是: FastCGI進程在機器引導時自動啓動的正確方法是什麼?

謝謝!

+0

如果你已經擁有的FastCGI/nginx的設置通過文件在'運行/ System/Library/LaunchDaemons/nginx.plist',你說它會自動啓動,那麼問題是什麼?聽起來它應該在機器啓動時啓動。 –

+1

nginx開始,但django-fastcgi部分是一個單獨的過程。 nginx通過套接字(或命名管道等)與django webapp進程通信(通過fastcgi,據我所知)。 – cachvico

+0

您是否可以不重複您用於讓nginx開始讓django fastcgi服務啓動的過程?使用FastCGI,服務啓動順序無關緊要,只要收到實際的請求,他們就會找到對方。 – SingleNegationElimination

回答

0

在這種情況下,我會建議使用wsgi,因爲wsgi進程是由nginx發起的,它是一個「獨立」進程。一個典型的nginx的WSGI和配置:

myproject.wsgi:

#!/usr/bin/python2.7 

import djangorecipe.wsgi 

application = djangorecipe.wsgi.main('settings', logfile='/var/log/django/myproject.wsgi.log') 

myproject.nginx.conf:

server { 
    listen  80; 
    server_name myproject.com; 

    # static resources 
    location ^~ /static/ { 
     alias /var/www/myproject/static/; 
     expires 31d; 
    } 

    wsgi_var REQUEST_METHOD  $request_method; 
    wsgi_var QUERY_STRING  $query_string; 
    wsgi_var CONTENT_TYPE  $content_type; 
    wsgi_var CONTENT_LENGTH  $content_length; 
    wsgi_var SERVER_NAME   $server_name; 
    wsgi_var SERVER_PORT   $server_port; 
    wsgi_var SERVER_PROTOCOL  $server_protocol; 

    # additional variables (not used if unavailable) 
    wsgi_var REQUEST_URI   $request_uri; 
    wsgi_var DOCUMENT_URI  $document_uri; 
    wsgi_var DOCUMENT_ROOT  $document_root; 
    wsgi_var SERVER_SOFTWARE  $nginx_version; 
    wsgi_var REMOTE_ADDR   $remote_addr; 
    wsgi_var REMOTE_PORT   $remote_port; 
    wsgi_var SERVER_ADDR   $server_addr; 
    wsgi_var REMOTE_USER   $remote_user; 

    location/{ 
     client_body_buffer_size 50; 
     wsgi_pass /var/www/myproject/myproject.wsgi; 

     wsgi_pass_authorization off; 
     wsgi_script_reloading on; 
     wsgi_use_main_interpreter on; 
    } 

    # logging 
    access_log /var/log/nginx/myproject/access.log; 
    error_log /var/log/nginx/myproject/error.log; 
} 
+0

nginx的'mod_wsgi'插件有一些嚴重的缺點;尤其是,一旦python應用程序阻塞,django應用程序就會執行很多操作(等待數據庫/文件系統調用),您將失去nginx的性能優勢。 – SingleNegationElimination

+0

謝謝,我完全沒有意識到這一點,儘管我已經在類似的設置上進行了許多負載測試。 – qoda