nginx+uwsgi+python捕获http消息并处理
Posted 朱韦刚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+uwsgi+python捕获http消息并处理相关的知识,希望对你有一定的参考价值。
nginx+uwsgi+python捕获http消息并处理(一)
写本文的目的及应用场景,当http发送消息给nginx,我们要捕获并处理这个消息时可以采用的方法有例如,给nginx加一个module,写nginx的lua程序,或者用uwsgi去对接nginx;python是具体具体接收消息并处理的程序。这里简单介绍nginx+uwsgi+python捕获http消息并处理。
1:安装uwsgi
在linux系统系统中执行
sudo add-apt-repository ppa:stevecrozz/ppa /
sudo apt-get update
sudo apt-get install uwsgi
完成安装。
2:nginx的配置
在nginx的http的模块配置中配置如下
location /gvc_uwsgi #处理uwsgi
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
其中9090就是我用到的端口。gvc_uwsgi就是我们的
http模块中location地址。
3:编写处理的python命名为uwsgi_test.py
def application(environ, start_response):
# the environment variable CONTENT_LENGTH may be empty or missing
try:
request_body_size = int(environ.get('CONTENT_LENGTH', 0))
except (ValueError):
request_body_size = 0
print(request_body_size)
# When the method is POST the query string will be sent
# in the HTTP request body which is passed by the WSGI server
# in the file like wsgi.input environment variable.
request_body = environ['wsgi.input'].read(request_body_size) #获取request_body
print(request_body)
....
....
具体的处理
....
....
status = "200 OK"
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
application(environ, start_response):就是我们的程序入口,request_body是接收到的http消息,response_body是返回的内容。
4:启动
首先启动nginx这里不说明,启动uwsgi命令如下:
sudo uwsgi -s 127.0.0.1:9090 --plugin python --wsgi-file uwsgi_test.py
uwsgi_test.py就是我们写的python脚本。
5:给nginx发送模拟消息
这里用火狐浏览器的httprequester模拟发送http消息
例如:20170830:152700:1000:-1:2001:3001发送这个消息。
发送地址:http://10.144.96.157:8080/gvc_uwsgi,注意这里的ip是nginx的ip,这个8080是nginx的http的模块配置,不是那个uwsgi的9090端口,gvc_uwsgi就是我们http模块中location地址。
6:运行结果
可以看到打印的http消息,具体处理根据不同业务做处理。
如有错误请指正:
交流请加QQ群:62054820
QQ:379969650.
以上是关于nginx+uwsgi+python捕获http消息并处理的主要内容,如果未能解决你的问题,请参考以下文章
mysql + Python3.5.2 + Django + Uwsgi + Nginx实现生产环境
Nginx+uwsgi+Django (Python web环境)
Python3 - Nginx+uwsgi+Flask 部署到Centos服务器