轉:nginx上用fastcgi配置python環境


nginx上用fastcgi配置python環境(一)  

2010-09-02 17:39:15|  分類: Apache/Nginx |  標簽:wsgi  flup  fcgi  python  nginx   |字號 訂閱

 
 
      費了2天的功夫,翻閱了無數的中文、英文資料,終於搞定。寫下此文留待以后翻閱用
     本文環境,centOS 5.4 ,Nignx-0.8.49, Python 2.6.5

=====================================================================================
       WSGI是Python應用程序或框架和Web服務器之間的一種接口,已經被廣泛接受, 它已基本達成它了可移植性方面的目標。  
      WSGI 沒有官方的實現, 因為WSGI更像一個協議. 只要遵照這些協議,WSGI應用(Application)都可以在任何實現(Server)上運行, 反之亦然。

     WSGI具體實現有很多種方法,網上有很多的用python寫的框架,比如facebook的tornado,我用的是flup,具體的介紹可以到  http://pypi.python.org/pypi/flup/1.0

     對於WSGI的深入理解可以參考本博客的另一篇文章:

     cd /usr/local/src
     wget http://pypi.python.org/packages/2.5/f/flup/flup-1.0-py2.5.egg#md5=3c9368437e9bffb950c6cce54425d32f
     tar -xzvf flup-1.0.3.dev-20100525.tar.gz
     cd     flup-1.0.3.dev-20100525
     python setup.py install
     到此flup安裝完畢
=====================================================================================
 以上是准備工作,下面正式開始
  
 配置nginx,找到nginx.conf
 添加一段如下代碼
 server
  {
    listen  8000;
   server_name test.com;
    location /
    {
       #fastcgi_pass  unix:/tmp/python-cgi.sock;( 注1 )
      fastcgi_pass  127.0.0.1:8008; ( 注意這里的端口和上面的listen的8000端口要不一樣,否則會報地址已占用的錯 )
      fastcgi_param SCRIPT_FILENAME "";
      fastcgi_param PATH_INFO $fastcgi_script_name;
      include fcgi.conf;
    }
  }

注1:這里最好是用127.0.0.1:8000代替,這樣的話就沒有訪問權限的限制,如果用的是python-cgi.sock,還得chmod 777 python-cgi.sock才可以,不然的話瀏覽器會出現505的內部錯誤。

 引用原文如下: A Web server can connect to a FastCGI server in one of two ways: It can use either a Unix domain socket (a “named pipe” on Win32 systems), or it can use a TCP socket. What you choose is a manner of preference; a TCP socket is usually easier due to permissions issues.


 然后我們再寫一個fcgi.py,代碼如下
#!/usr/bin/python
# encoding : utf-8

from flup.server.fcgi import WSGIServer

def myapp(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['Hello World!\n']

if __name__  == '__main__':
   WSGIServer(myapp,bindAddress=('127.0.0.1',8008)).run()(注2
  
注2,看到了嗎,這里的bindAddress 的值是一個元組,這個是WSGIServer的源代碼要求這么寫的,而且它的值對應的是上面fastcgi-pass的值

然后我們就可以運行python fcgi.py -- method=prefork/threaded minspare=50 maxspare=50 maxchildren=1000 (注3)
注3:后面的那些參數相當於php-cgi后面的參數,但是具體的用途還需要進一步探索

運行到這了,我們就可以在瀏覽器里面敲: http://localhost:8000
如果返回 Hello World,恭喜你,邁出了nginx 運行python的第一步

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com