将标头从nginx传递到运行Flask应用程序的uWSGI后端

时间:2017-06-29 03:49:29

标签: python nginx flask uwsgi wsgi

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

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

nginx config的相关部分

        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请求部分下,虽然我不确定这是多么可靠,因为我注入了一个HTTP头,我知道使用Burp Suite {{1影响应用程序行为并且它没有显示在HTTP请求部分下,但它确实影响了应用程序行为(X-Foo-Bar: 1中的某个if语句)显然,如果客户端出于安全原因添加了标题,我会删除标题。

上面的屏幕截图是使用Flask-DebugToolbar的HTTP标头尝试为HTTP标头执行@app.before_request

由于

1 个答案:

答案 0 :(得分:2)

解决了它。

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

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

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