【问题标题】:Deploy Django REST API to api.example.com: Apache 2.2, mod_wsgi and mod_rewrite将 Django REST API 部署到 api.example.com:Apache 2.2、mod_wsgi 和 mod_rewrite
【发布时间】:2015-06-30 16:09:32
【问题描述】:

几天来,我一直在搜索有关此主题的信息,但一直遇到障碍。

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

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

我想从子域 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'

我有一个单独的 SSL 证书用于这个子域,并且他的配置正确。

我在我的 Apache 配置中尝试了很多方法来实现这一点,但每次都失败了。我想我可以使用mod_rewrite 静默地从https://www.example.com/api/v1/ 获取内容,同时将https://api.example.com 留在地址栏中。这可能吗?这是我尝试过的(在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 Framework 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/

【问题讨论】:

    标签: django mod-rewrite django-rest-framework subdomain


    【解决方案1】:

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

    Django subdomain configuration for API endpoints

    我一直在玩这个,它显示出希望,虽然我还没有“解决”我的问题。我计划在获得更多要分享的信息后编辑此答案。同时,如果有人使用django-hosts 来解决我的原始问题,请在此处添加您的答案或至少制作一些 cmets!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 2020-07-13
      • 1970-01-01
      • 2011-02-05
      • 2019-11-05
      相关资源
      最近更新 更多