这是一个数据流:http <--> nginx <--> uWSGI <--> python webapp
我猜在 nginx 中有 http2uwsgi 传输,在 uWSGI 中有 uwsgi2http。
如果我想直接调用 uWSGI 来测试 webapp 中的 API 怎么办?
实际上我正在使用金字塔。只需在 .ini 中配置 [uwsgi] 并运行 uWSGI。但我想测试uWSGI是否正常持有webapp功能,uWSGI套接字不能通过http直接访问。
尝试使用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
。如果需要,您还可以指定不同的本地端口。
根据您的问题,我假设您想使用 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,这应该适合您。
首先,考虑这些问题:
如果你确定你有访问权限,你可以直接调用http://hostname:port/path/to/uWSGI
API 访问。