我的文档中有一个使用 uwsgi 的 Django 应用程序。由于我们有多个 Docker 在不同的机器上运行,因此我们使用 haproxy 作为负载均衡器。
我的问题是:我应该将 uwsgi 与http
or 一起使用http-socket
吗?
从这里https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html
它似乎http
http-socket 选项将使 uWSGI 原生使用 HTTP。如果您的 Web 服务器不支持 uwsgi 协议,但能够与上游 HTTP 代理通信,或者如果您使用 Webfaction 或 Heroku 等服务来托管您的应用程序,则可以使用 http-socket。如果您打算仅使用 uWSGI 向世界公开您的应用程序,请改用 http 选项,因为路由器/代理/负载均衡器将成为您的盾牌。
最后一部分建议http
如果有负载均衡器该怎么办
但这里https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html
http 和 http-socket 选项是完全不同的东西。第一个进程产生一个额外的进程,将请求转发给一系列工作进程(将其视为一种屏蔽形式,与 apache 或 nginx 处于同一级别),而第二个进程则设置工作进程以本地方式使用 http 协议。TL/DR:如果你打算直接向公众公开uWSGI,请使用--http,如果你想在后端使用http的网络服务器后面代理它,请使用--http-socket。
似乎推断,http-socket
如果不直接暴露在公众面前
那么,用 haproxy 该怎么做呢?
haproxy
不uWSGI
直接支持。你需要使用http-socket
. 您还可以启用PROXY
协议支持以保留--http-enable-proxy-protocol
客户端的 IP 地址。