缺少django,nginx和gunicorn的自定义标题

die*_*us9 9 django configuration nginx http-headers gunicorn

免责声明:

我正在一个项目中工作,其中存在一个"庞大的"webapp,它具有移动设备的api,因此更改api不是一种选择.

这个应用程序是很久以前开发的,有几个开发人员已经开发过了

话虽如此,问题是这样的;

在这个站点的移动api(只是视图而不是返回json数据)中,代码正在查找令牌,但在请求的标题中:

token = request.META.get('HTTP_TOKEN')
Run Code Online (Sandbox Code Playgroud)

当我在本地测试这个API时,工作正常,但在生产中没有,所以,我试着找出最新情况并发现:

django将头,甚至自定义头转换为request.META中的键,我使用urllib2和 请求测试api,生产中的问题是在生产服务器中request.META从来没有一个名为HTTP_TOKEN的键,所以,做一点debug我认真思考问题是我们为django应用程序提供服务的方式.

我们正在使用django1.3,nginx,gunicorn,virtualenvwrapper,python2.7.

我的主要嫌疑人是nginx,我认为,在某种程度上,nginx会收到标题,但不要将它转发给django,我尝试对此进行一些研究,但我只发现了有关nginx的安全头和自定义头的信息,但我找不到doc或者关于如何告诉nginx允许该标头并且不删除它的东西.

我在这里需要帮助,第一件事是测试nginx是否收到标题,但我只知道一点关于nginx,我不知道如何告诉它记录请求的标题.

谢谢

更新

nginx conf文件

Day*_*ayo 5

如果使用 uwsgi_pass 访问 Django,则在适当的位置...

# All request headers should be passed on by default     
# Make sure "Token" response header is passed to user 
uwsgi_pass_header  Token;
Run Code Online (Sandbox Code Playgroud)

如果使用 fastcgi_pass 访问 Django,则在适当的位置...

# All request headers should be passed on by default     
# Make sure "Token" response header is passed to user 
fastcgi_pass_header  Token;
Run Code Online (Sandbox Code Playgroud)

如果使用 proxy_pass 访问 Django,则在适当的位置...

# All request headers should be passed on by default
# but we can make sure "Token" request header is passed to Django 
proxy_set_header Token $http_token;

# Make sure "Token" response header is passed to user 
proxy_pass_header  Token;
Run Code Online (Sandbox Code Playgroud)

这些应该有助于消除 Nginx 没有从您的问题中传递信息的可能性。