14

我设置了 python/flask/uwsgi+nginx 网络应用程序,它工作正常。我想用geoip,我在nginx端设置的:

   location / {
            include         uwsgi_params;
            uwsgi_pass      unix:/tmp/qbaka-visit.sock;
            ...
            uwsgi_param     GEOIP_COUNTRY_CODE $geoip_country_code;
    }

但现在我不知道如何在 python 中读取这个属性。在 uwsgi 之前,我使用了简单的 flask builtin webserver + nginx proxy_pass,在这种情况下,我使用proxy_set_header X-Geo-Country $geoip_country_code; 并阅读了这个参数request.headers,但是对于 UWSGI 参数,我不知道如何阅读它们。

4

1 回答 1

26

uwsgi_param为应用程序设置一个给定名称的 wsgienviron键。您可以将其用于标头,它遵循使用HTTP_前缀的 CGI 约定。相当于你的proxy_set_header将是:

uwsgi_param HTTP_X_GEOIP_COUNTRY $geoip_country_code;

请注意,标头名称必须为大写并用下划线替换破折号,才能被识别为 wsgi 中的有效标头。

或者,看起来环境可以在烧瓶中访问,因为request.environ,所以你可以保持你的 uwsgi_param 相同,但将它读为request.environ['GEOIP_COUNTRY_CODE']. 实际上,这可能更可取,因为您可以通过这种方式将它们与实际的请求标头区分开来。

于 2013-01-03T05:27:29.683 回答