【问题标题】:Pass a header from nginx to uWSGI backend running a Flask application将标头从 nginx 传递到运行 Flask 应用程序的 uWSGI 后端
【发布时间】:2017-12-02 14:51:23
【问题描述】:

我有一个在 Debian 上运行的 nginx 服务器。同一台服务器也在运行带有 Flask Python 应用程序的 uWSGI。我正在尝试做的一件事是从 nginx 将 HTTP 标头传递给 Flask 应用程序,该标头由 nginx 条件确定,即哪个虚拟主机正在运行请求。

我正在尝试将一个 HTTP 标头从 nginx(不是来自客户端)传递到 uWSGI 后端,但它没有显示在 Flask 的 DebugToolbar 中的 HTTP 请求下。

nginx 配置中的相关部分

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri =404 @flaskapplication;
}
        location @flaskapplication {
            include uwsgi_params;
            uwsgi_pass unix:/tmp/flaskapplication.sock;
            uwsgi_param HTTP_X_TESTING 'bar';
            uwsgi_modifier1 30;
        }

在运行上述 nginx 配置时,上述标头不会显示在 Flask-DebugToolbar HTTP 请求部分下,尽管我不确定这有多可靠,因为我注入了一个我知道使用 Burp Suite X-Foo-Bar: 1 影响应用程序行为的 HTTP 标头并且它没有显示在 HTTP 请求部分下,但它确实影响了应用程序的行为(@app.before_request 中的某个 if 语句)显然,如果客户端出于安全原因添加它,我会删除它。

上面的截图是带有 Flask-DebugToolbar 的 HTTP 标头尝试为 HTTP 标头执行uwsgi_param

谢谢

【问题讨论】:

    标签: python nginx flask uwsgi wsgi


    【解决方案1】:

    解决了。

    我启用了 Flask 的调试模式并引发了异常以获取对 REPL 的访问权限。

    在相关位置块的 nginx 配置中使用uwsgi_param HTTP_X_FOO 'Foo bar lorem ipsum';request.headers 看起来像这样(隐私和无关信息已被编辑)

    所以request.headers != Flask-DebugToolbar 请求面板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-19
      • 2019-04-05
      • 2012-12-26
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 2012-11-11
      相关资源
      最近更新 更多