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,我不知道如何告诉它记录请求的标题.
谢谢
更新
如果使用 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 没有从您的问题中传递信息的可能性。
| 归档时间: |
|
| 查看次数: |
5067 次 |
| 最近记录: |