Nginx和Gunicorn WSGI变量

问题描述

我正在测试Gunicorn作为uWsgi的替代产品。在Gunicorn实例的前面设置了Nginx反向代理。不使用uWsgi的后果是我不得不诉诸于使用Nginxproxy_pass而不是uwsgi_pass。使用uwsgi_pass,我可以使用uwsgi_param来覆盖PATH_INFOSCRIPT_NAME Wsgi变量。 proxy_pass没有等效的指令。您如何为兼容Wsgi的应用程序服务器(例如Gunicorn)的proxy_pass设置这些Wsgi变量?

解决方法

Gunicorn documentation建议您可以通过HTTP标头指定SCRIPT_NAME,而无需进一步说明。深入研究源代码后发现,该代码接受了一个实际上名为SCRIPT_NAME的非标准标头。以下内容可用于为Gunicorn设置SCRIPT_NAME

proxy_set_header SCRIPT_NAME /myapp;

PATH_INFO无法设置。但是,在我的情况下,无需为Gunicorn设置PATH_INFO,因为它会自动从SCRIPT_NAME中剥离PATH_INFO前缀。使用uWSGI,我不得不覆盖PATH_INFO来剥离SCRIPT_NAME前缀。