2013-01-03 10 views
10

Konfiguruję aplikację python/flask/uwsgi + nginx i działa dobrze. Chcę używać GeoIP, ustawić go na nginx strony:Jak odczytać parametry UWSGI w python/flask przeszedł z nginx

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

Ale teraz nie wiem jak odczytać tę właściwość w Pythonie. Przed wprowadzeniem uwsgi użyłem prostego wbudowanego serwera www + nginx proxy_pass, w którym to przypadku użyłem proxy_set_header X-Geo-Country $geoip_country_code; i przeczytałem ten argument używając request.headers, ale dla paramów UWSGI nie mogłem wymyślić jak je odczytać.

Odpowiedz

21

uwsgi_param ustawia klucz aplikacji o podanej nazwie pod adresem environ. Możesz użyć tego dla nagłówków, które są zgodne z konwencją CGI z użyciem prefiksu HTTP_. równowartość swojej proxy_set_header byłoby:

uwsgi_param HTTP_X_GEOIP_COUNTRY $geoip_country_code; 

Zauważ, że nazwa nagłówka muszą być pisane wielkimi literami i kresek zastąpione znakami podkreślenia, aby być uznane za ważny cel w WSGI.

Alternatywnie, wygląda na to, że środowisko jest dostępne w kolbie, jako request.environ, więc możesz zachować swoje uwsgi_param tak samo, ale przeczytaj je jako request.environ['GEOIP_COUNTRY_CODE']. Jest to prawdopodobnie lepsze, ponieważ można je odróżnić od rzeczywistych nagłówków żądań w ten sposób.

+1

Dziękuję bardzo, to działało. – Daniil

+0

Dzięki za to. Nie mogę jednak znaleźć * oficjalnej * dokumentacji dotyczącej ustawiania nagłówków HTTP z 'uwsgi_param' w dowolnym miejscu. Czy ktoś ma referencje? – esmail

+0

@esmail: relacja między nagłówkami żądań a 'HTTP_' nie jest częścią uwsgi, ale raczej' wsgi'/'pep-333' (patrz: https://www.python.org/dev/peps/pep -0333/# environ-variables). "uwsgi_param" ustawia pary klucz-wartość w środowisku przekazanym do aplikacji. W rzeczywistości "pep-333" wyraźnie przekazuje te dane do cgi spec: https://tools.ietf.org/html/rfc3875#section-4.1.18 – SingleNegationElimination

Powiązane problemy