【问题标题】:Why gunicorn parse WSGI directly?为什么 gunicorn 直接解析 WSGI?
【发布时间】:2015-10-10 08:33:56
【问题描述】:

当我们在 nginx 后面使用 gunicorn 时,总是需要将请求 proxy_pass 给 gunicorn。 但是 Nginx 有一个 wsgi 模块,它允许它发送 wsgi 请求(uwsgi_pass)到 wsgi 应用服务器,看起来 gunicorn 不能直接接受 wsgi 请求,它只是接受 HTTP 请求并将其转换为 wsgi 并调用 wsgi 应用程序。

gunicorn 是否支持直接接受 wsgi 请求?

如果 Nginx 有一些需要发送到 wsgi 应用服务器的 wsgi 环境参数,我该怎么办?

【问题讨论】:

    标签: nginx wsgi gunicorn


    【解决方案1】:

    没有“wsgi”协议之类的东西。

    WSGI 规范为 Python 定义了一个编程 API,而不是套接字协议。

    您对什么是称为“uwsgi”的套接字协议感到困惑。这与 gunicorn 接受的 HTTP 协议完全不同。

    你可以在 nginx 后面使用的唯一能理解 'uwsgi' 协议的是 uWSGI 包。

    您的选择是使用普通 HTTP 代理和 gunicorn,或 uwsgi 代理和 uWSGI。

    【讨论】:

    • 那么对于WSGI来说,还是基于HTTP协议吧?
    • 如果想给gunicorn传一些自定义参数怎么办?
    • 不,WSGI API 接口没有严格绑定到 HTTP。 uWSGI 包是 uwsgi 协议和 WSGI API 接口之间的桥梁。如果您想将进程范围的参数传递到在 gunicorn 下运行的 WSGI 应用程序中,请使用环境变量。参数是干什么用的?
    • 这是一个connectionID,它属于内部某种具有私有协议的“服务器”,我有一个Nginx模块来连接到那个“服务器”,所以我必须将它传递给wsgi应用程序,因为它需要使用该 connectionID 与该服务器进行交互。
    • 查看 nginx 是否允许您通过特殊的 X-Connection-ID HTTP 标头传递连接 ID。无论是通过 HTTP 还是 uwsgi 协议代理,如果你可以在请求代理时设置一些头部,后端应该能够看到它。
    猜你喜欢
    • 2012-09-09
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多