3

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

我猜在 nginx 中有 http2uwsgi 传输,在 uWSGI 中有 uwsgi2http。

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

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

4

3 回答 3

11

尝试使用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。如果需要,您还可以指定不同的本地端口。

于 2015-10-01T17:35:26.573 回答
4

根据您的问题,我假设您想使用 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-sockets 配置 uwsgi,nginx 能够通过 uwsgi-protocol ( http://uwsgi-docs.readthedocs.org/en/latest/Protocol.html ) 与该套接字通信。

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

于 2015-12-03T09:56:59.397 回答
1

首先,考虑这些问题:

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

如果你确定你有访问权限,你可以直接调用http://hostname:port/path/to/uWSGIAPI 访问。

于 2012-09-07T08:43:14.600 回答