nginx+uwsgi 安装
-------------------------
1.编译
-------以0.9.6.8版本为例
tar xzvf uwsgi-0.9.6.8.tar.gz
cd uwsgi-0.9.6.8
make
cp uwsgi /usr/bin
2.配置nginx转发规则
在nginx配置文件的server段中,加上配置
# 把所有请求都重定向给uwsgi处理
location / {
include uwsgi_params
uwsgi_pass 127.0.0.1:9090
}
或
# 将指定的url重定向个uwsg的
location ^~ /your_dir/your_cgi {
include uwsgi_params
uwsgi_pass 127.0.0.1:9090
}
3.运行uwsgi
执行
uwsgi -s :9090 -w your_app_file
-------------------------示例的内容可以是:
#!/usr/bin/python
#hello.py
import web
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())
class hello:
def GET(self, name):
if not name:
name = 'World'
return 'Hello, ' + name + '!'
application = app.wsgifunc()
nginx配置
location ^~ /eventlet/cgi {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
}
nginx重启
启动:
uwsgi --socket myapp.cgi -s :9090 --w myapp.cgi
访问:
curl http://localhost/eventlet/myapp
------------------ 获取请求中的数据
import sys
def read_obj(env):
if 'wsgi.input' in env:
return env['wsgi.input']
else:
return sys.stdin
#获取HTTP POST数据
def get_http_post_data(env):
content_length = int(env['CONTENT_LENGTH'])
buf = read_obj(env).read(content_length) #buf就是post的参数,当然还是个字符串
return buf
#获取HTTP GET数据
def get_http_get_data(env):
buf = env['QUERY_STRING']
return buf
def application(env, start_response):
start_response('200 OK',[('Content-Type','text/html')])
http_post_data = get_http_post_data(env)
http_get_data = get_http_get_data(env)
return '' #这个示例不在乎返回信息
----------------------------进一步
返回格式化的数据示例:
import sys,json
def read_obj(env):
if 'wsgi.input' in env:
return env['wsgi.input']
else:
return sys.stdin
#获取HTTP POST数据
def get_http_post_data(env):
content_length = int(env['CONTENT_LENGTH'])
buf = read_obj(env).read(content_length) #buf就是post的参数,当然还是个字符串
return buf
#获取HTTP GET数据
def get_http_get_data(env):
buf = env['QUERY_STRING']
return buf
def application(env, start_response):
start_response('200 OK',[('Content-Type','text/html')])
http_post_data = get_http_post_data(env)
http_get_data = get_http_get_data(env)
#返回格式化数据,json很好用:-)
reply_json = {'code':0,'msg':'this is a demo return str'}
return json.dumps(reply_json)