2013-01-03 2 views
10

私はpython/flask/uwsgi + nginx web appをセットアップしました。nginxから渡されたPython /フラスコのUWSGIパラメータを読むには

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

しかし、今、私はpythonでこのプロパティを読み取る方法を知らない:私はnginxの側にそれを設定、のGeoIPを使用したいです。私はproxy_set_header X-Geo-Country $geoip_country_code;を使用し、request.headersを使ってこの引数を読んでいましたが、UWSGIのパラメータのために私はそれらを読む方法を理解できませんでした。

答えて

21

uwsgi_paramは、指定された名前のwsgi environキーをアプリケーションに設定します。これは、プレフィックスHTTP_を使用するというCGI規約に従ったヘッダーに使用できます。あなたのproxy_set_headerの同等は次のようになります。ヘッダ名はWSGIで有効なヘッダーとして認識されるように、大文字で、アンダースコアに置き換えダッシュでなければならないこと

uwsgi_param HTTP_X_GEOIP_COUNTRY $geoip_country_code; 

ノート。

また、environがフラスコ内でアクセシブルであるように見えるのはrequest.environなので、uwsgi_paramを同じに保つことができますが、request.environ['GEOIP_COUNTRY_CODE']と読んでください。実際の要求ヘッダーと区別できるので、実際はこれが望ましいでしょう。

+1

ありがとうございました。 – Daniil

+0

ありがとうございます。私はどこでも 'uwsgi_param'でHTTPヘッダーを設定することについての公式文書を見つけることはできません。誰かがリファレンスを持っていますか? – esmail

+0

@esmail:リクエストヘッダと 'HTTP_'との関係はuwsgiではなく' wsgi'/'pep-333'です(https://www.python.org/dev/peps/pep参照)。 -0333 /#environ-variables)。 'uwsgi_param'は、アプリケーションに渡される環境上のキーと値のペアを設定します。実際、 'pep-333'はこれらをcgi仕様に具体的に委譲しています:https://tools.ietf.org/html/rfc3875#section-4.1.18 – SingleNegationElimination

関連する問題