2015-04-22 63 views
2

我一直在搜索关于此主题的信息几天,并且一直跑到路障中。将Django REST API部署到api.example.com:Apache 2.2,mod_wsgi和mod_rewrite

我有一个Django网站和应用程序运行在www.example.com,我强制HTTPS。它使用WSGI部署在Apache 2.2上。这工作正常,适用于example.comwww.example.com

我也有一个REST API(pip install djangorestframework)运行在https://www.example.com/api/v1/。这也很好。

我想从子域https://api.example.com运行该API,并将该URL保存在地址栏中。例如,为了获取JSON对象我可能会使用这样的:

curl -X GET https://api.example.com/objects/ -H 'Authorization: Token xxx' 

我可以利用这个得到这个现在:

curl -X GET https://www.example.com/api/v1/objects/ -H 'Authorization: Token xxx' 

我对这个subdmain一个单独的SSL证书,他一直正确配置。

我已经在我的Apache配置中尝试了很多事情来完成这个任务,但每次都失败了。我以为我可以使用mod_rewritehttps://api.example.com的地址栏中静默获取https://www.example.com/api/v1/的内容。这可能吗?这里是我试过什么(在sites-available虚拟主机文件):

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^api.example.com [NC] 
RewriteRule ^(.*)$ https://www.example.com/api/v1/$1 [L] 

我已经试过这种想法的几个变化都无济于事。我玩HTTPS on/off也没有真正的好处。

,我读了使用mod_proxy可以做到这一点了几个地方,但是当我去了这条道路,这个API是提供所需的URL(https://api.example.com)(相当多的调整后),但没有我的静态内容在那里当我点击了Django的REST框架UI相对链接,我会得到404,因为它一直在寻找:

https://api.example.com/api/v1/

着Django抱怨:/api/v1/api/v1/

我想所有的我米试图做的是使https://api.example.com API的基本URL,就好像它是https://www.example.com/api/v1/

回答

0

重复导致的django-hosts包的发现:

Django subdomain configuration for API endpoints

我一直在玩这个周围,它显示了承诺,我虽然没有“解决”我的问题呢。一旦我获得更多信息分享,我计划编辑这个答案。同时,如果有人使用django-hosts来处理我的原始问题,请在此处添加您的答案或至少发表一些意见!