2015-04-22 64 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來處理我的原始問題,請在此處添加您的答案或至少發表一些意見!