使用fastcgi部署django應用

1.fastcgi和cgi的區別

1)CGI (Common Gateway Interface): html

用來做爲 Web Server 同 Python, PHP 等的通訊手段。而在靜態網頁的時代, 只須要 Web Server 便可。python

2)CGI 的缺點: nginx

1. 每一個請求都會產生一個對應的 gateway application 進程。從一個請求到另外一個請求, 內存和上下文信息會丟失。沒法 cache 來提升效率。web

2. 大負載能力不足。對系統而言,啓動一個進程很是耗資源。大量的併發請求(每一個請求啓動一個進程)會瞬間搞跨服務器。django

3. 將 web server, gateway application 部署到不一樣服務器上的願望難以實現。服務器

 

3)FastCGI (Fast Common Gateway Interface): 併發

同 CGI 同樣都是一個協議, 而不是一個具體實現。app

4)FastCGI 相對於 CGI 的改進: spa

反覆重用一個進程來處理多個請求, 而不是每一個請求產生一個進程。線程

2.安裝和使用

1)安裝python-flup

easy_install python-flup

2)使用fastcgi方式啓動django應用 

python manage.py runfcgi method=prefork host=127.0.0.1 port=9000 pidfile=/var/run/django.pid

runfcgi 的重點參數介紹:

method:

prefork or threaded (default prefork)

prefork 內存佔用量大, threaded 內存須要量小。

prefork 在超大負載是仍然能夠很好的工做, threaded 在大負載時經常沒法響應。

prefork 至關於使用 進程處理每一個請求, 而 threaded 是每一個子進程再產生必定量的線程來處理請求。

 

pidfile:

把進程ID寫入到指定的文件中。

 

3)Nginx的配置:

 

location / { 
            root html; 
            index index.html index.htm; 
            fastcgi_pass 127.0.0.1:9000; 
            fastcgi_param PATH_INFO $fastcgi_script_name; 
            fastcgi_param REMOTE_ADDR $remote_addr;
        }  
location /static{
        alias /Application/ownforum/media;
    }


修改完以後須要 reload nginx:

4)重啓nginx

/usr/local/nginx/sbin/nginx -s reload
相關文章
相關標籤/搜索