天天看點

Nginx+FastCGI+Python

網上更多文章是用Django、webpy等架構的前提下,由于我隻是用其CGI而不是搞純web開發,是以暫時不打算用這類架構,直接用flup包(其實大多數架構WSGI也是封裝的flup)。

廢話不多說,進入正題,先看下需要的環境和工具:

1、Linux2.6(廢話- -!) 2、Nginx(需包含fastcgi子產品) 4、Python

安裝都是些正常方法,就不一一介紹了

nginx的fastcgi配置照搬php的即可。

先上張簡單畫的原理圖

Nginx+FastCGI+Python

spawn-fcgi是個工具,用來以fastcgi方式開啟多個WSGIServer程序。

例:

spawn-fcgi -f /data/WSGIServer.py -a 127.0.0.1 -p 5678 -u www -F 5

-f WSGIServer腳本的決定路徑

-a fastcgi綁定的ip

-p fastcgi綁定的端口

-u 已什麼身份運作

-F 要啟動的程序數(很多人以為是-C,其實那是PHP專用的,這裡要用-F)

需要編碼的部分就是WSGIServer這裡了,貼個簡單測試代碼

#!/usr/bin/env python 

# -*- coding: utf-8 -*- 

import flup.server.fcgi as flups 

def application(environ, start_response): 

"""該函數可以寫成子產品import導入""" 

ret = "" 

try: 

uri = environ['PATH_INFO'] 

if uri[-1] == "/": 

uri = uri[:-1] 

if uri == "": 

ret = str(environ) 

elif uri == "/sleep": 

import time 

time.sleep(5) 

ret = "sleep: 5 secends" 

else: 

ret = uri 

except Exception, e: 

ret = str(e) 

status = '200 OK' 

response_headers = [('Content-type','text/plain')] 

start_response(status, response_headers) 

return [ret] 

if __name__ == "__main__": 

#直接用python運作 

#flups.WSGIServer(application, multithreaded=True, multiprocess=False, bindAddress=('127.0.0.1', 5678)).run() 

#fastcgi方式運作 

flups.WSGIServer(application).run()

本文轉自einyboy部落格園部落格,原文連結:http://www.cnblogs.com/einyboy/archive/2012/11/30/2796926.html,如需轉載請自行聯系原作者。