Nginx+FastCGI+Python


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

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

1、Linux2.6(廢話- -!)

2、Nginx(需包含fastcgi模塊)

3、Spawn-fcgi (官方下載:http://redmine.lighttpd.net/projects/spawn-fcgi/wiki

4、Python

5、flup(官方下載:http://trac.saddi.com/flup

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

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

先上張簡單畫的原理圖

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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM