我可以使用uwsgi协议来调用http吗?

时间:2012-09-07 08:13:38

标签: python nginx uwsgi

这是一个数据流: http< - > nginx< - > uWSGI< - > python webapp

我猜nginx中有http2uwsgi转移,uWSGI中有uwsgi2http。

如果我想直接调用uWSGI来测试webapp中的API,该怎么办?

实际上我正在使用金字塔。只需在.ini中配置[uwsgi]并运行uWSGI。但我想测试uWSGI是否正常保持webapp功能,http不能直接访问uWSGI套接字。

3 个答案:

答案 0 :(得分:7)

尝试使用uwsgi_curl

$ pip install uwsgi-tools

$ uwsgi_curl 10.0.0.1:3030 /path

或者如果您需要再做一些请求,请尝试使用同一个包中的uwsgi_proxy

$ uwsgi_proxy 10.0.0.1:3030
Proxying remote uWSGI server 10.0.0.1:3030 "" to local HTTP server 127.0.0.1:3030...

因此您可以在http://127.0.0.1:3030/本地浏览。

如果您的应用程序仅允许某些Host标题,您也可以指定主机名

$ uwsgi_curl 10.0.0.1:3030 host.name/path

$ uwsgi_proxy 10.0.0.1:3030 -n host.name

如果应用程序具有静态文件,您可以使用-s参数将此类请求重定向到前端服务器。如果需要,您还可以指定不同的本地端口。

答案 1 :(得分:1)

首先,考虑一下这些问题:

  • uWSGI在哪个端口上运行?
  • uWSGI是在您的远程计算机上还是在远程计算机上运行?
  • 如果它在远程计算机上运行,​​是否可以从计算机访问该端口? (iptables规则可能禁止外部访问)

如果您确定自己可以访问,则可以致电http://hostname:port/path/to/uWSGI直接访问API。

答案 2 :(得分:1)

根据您提出的问题,您希望使用uWSGI直接运行符合WSGI的应用程序并打开HTTP-Socket。您可以通过使用

配置uwsgi.ini(或任何文件名)来实现
http=127.0.0.1:8080

uwsgi现在将打开一个HTTP套接字,它在端口8080上侦听来自localhost的传入连接(参见文档:http://uwsgi-docs.readthedocs.org/en/latest/HTTP.html

或者,您可以使用http参数从命令行直接启动进程:

$ uwsgi --http=127.0.0.1:8080 --module=yourapp:wsgi_entry_point

如果使用unix-socket配置uwsgi,nginx可以通过uwsgi-protocol(http://uwsgi-docs.readthedocs.org/en/latest/Protocol.html)与该套接字通信。

请记住,如果你通常通过nginx提供静态内容(css,javascript,images),你也需要设置它,如果你直接运行uwsgi。但是,如果您只想测试REST-API,那么这应该适合您。