Apache部署Django项目时,请求头中的Authorization信息丢失
问题原因
由于用户认证一直失败,通过输出请求头信息(request.META
),发现请求到达Django
的时候,Headers
里面已经不包含Authorization
参数了。那么一定是在传输中被丢弃了,于是查了一下,发现是Apache的原因。
请求到达Apache的时候,请求头里面的
Authorization
直接被过滤了
解决办法
- 在项目配置中添加一行
WSGIPassAuthorization On
- 完整的配置如下:
<VirtualHost *:7000>
ServerName xxx.com
ServerAlias www.xxx.com
# 项目wsgi文件路径
WSGIScriptAlias / C:/ProjectPath/Project/wsgi.py
# 此处允许请求头中的Authorization数据通过Apache
WSGIPassAuthorization On
<Directory C:/ProjectPath/Project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
DocumentRoot "C:/ProjectPath"
<Directory "C:/ProjectPath">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog "logs/access_ate.log"
</VirtualHost>
完美解决!!!
PS:网上说还有另外两种解决方法,不过我发现大多是PHP的,而且,只说叫修改
.htaccess
文件,我一搜,一堆这个开头的文件,后面各种天花乱坠的后缀,实在是不知道修改哪个啊,所以就没有尝试了。