I set up python/flask/uwsgi+nginx web app and it works fine. I want to use geoip, I set it up on nginx side:
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/qbaka-visit.sock;
...
uwsgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
}
But now I don't know how to read this property in python. Prior to uwsgi I used simple flask builtin webserver + nginx proxy_pass, in which case I used proxy_set_header X-Geo-Country $geoip_country_code;
and read this argument using request.headers
, but for UWSGI params I couldn't figure out how to read them.
Nginx implements a uwsgi proxying mechanism, which is a fast binary protocol that uWSGI can use to talk with other servers. The uwsgi protocol is actually uWSGI's default protocol, so simply by omitting a protocol specification, it will fall back to uwsgi . Save and close the file when you are finished.
uwsgi_param
sets a wsgi environ
key of the given name to the application. You can use this for headers, which follow the CGI convention of using an HTTP_
prefix. the equivalent of your proxy_set_header
would be:
uwsgi_param HTTP_X_GEOIP_COUNTRY $geoip_country_code;
note that the header name must be in upper case and with dashes replaced by underscores, to be recognized as a valid header in wsgi.
Alternativly, it looks like the environ is accessible in flask, as request.environ
, so you could keep your uwsgi_param the same, but read it as request.environ['GEOIP_COUNTRY_CODE']
. This is probably preferable, actually, since you can distinguish them from actual request headers that way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With