nginx+apache2+python+wsgi请求头中Authorization信息丢失

在开发公司CMDB过程中,前端使用augular4,后端使用django+restframework。

前端angular代码打包直接通过nginx静态资源访问的方式提供服务,后端api通过apache2的wsgi方式启动,通过nginx代理解决跨域向前端提供服务。

在本机开发的时候就很简单,nginx同时转发angular启动的web服务,django启动的api服务,api访问也很正常。

搭建集成测试环境时,后端使用virtualenv打包,通过apache2 conf启动,相关配置如下:

nginx:

root /usr/share/cmdb/web

location /api {
                proxy_pass http://127.0.0.1:8000;
        }
location /docs {
                proxy_pass http://127.0.0.1:8000;
        }

location /static {
                proxy_pass http://127.0.0.1:8000;
        }

apache2

<VirtualHost *:8000>
    WSGIScriptAlias / /usr/share/cmdb/venv/cmdb-api/cmdb/wsgi.py
    WSGIDaemonProcess cmdb python-path=/usr/share/cmdb/venv/lib/python2.7/site-packages
    WSGIProcessGroup cmdb
    WSGIApplicationGroup %{GLOBAL}
    Alias /static/ /usr/share/cmdb/venv/lib/python2.7/site-packages/rest_framework/static/
    <Directory /usr/share/cmdb/venv/lib/python2.7/site-packages/rest_framework/static/>
        Require all granted
    </Directory>
</VirtualHost>

api调用是需要登录后在header中加入Authorization,但搭建好的测试环境除了登录api能调用外,其余的api全部报401,提示信息为"invalid token header"。

通过print打印发现传入的Authorization值为空。

开始怀疑nginx没有将Authorization头转发,通过postman直接请求api,报相同的问题。

排除nginx问题,又怀疑是virtualenv依赖不全导致的,然后停掉apache2,激活virtualenv时通过python manager.py runserver调用api,发现没有问题。

最终剩下apache2的问题,这时候看了openstack keystone的配置,发现有个WSGIPassAuthorization On,看着很像。

在conf中加上此配置,Authorization请求头顺利转发。api调用正常。

最终的apache配置如下

<VirtualHost *:8000>
    WSGIScriptAlias / /usr/share/cmdb/venv/cmdb-api/cmdb/wsgi.py
    WSGIDaemonProcess cmdb python-path=/usr/share/cmdb/venv/lib/python2.7/site-packages
    WSGIProcessGroup cmdb
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    Alias /static/ /usr/share/cmdb/venv/lib/python2.7/site-packages/rest_framework/static/
    <Directory /usr/share/cmdb/venv/lib/python2.7/site-packages/rest_framework/static/>
        Require all granted
    </Directory>
</VirtualHost>

转载于:https://my.oschina.net/sannychan/blog/1559429

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值