将 Django REST API 部署到 api.example.com:Apache 2.2、mod_wsgi 和 mod_rewrite
Deploy Django REST API to api.example.com: Apache 2.2, mod_wsgi and mod_rewrite
几天来我一直在搜索关于这个主题的信息,但我一直 运行 遇到障碍。
我在 www.example.com
有一个 Django 网站和应用程序 运行ning,我强制使用 HTTPS。它使用 WSGI 部署在 Apache 2.2 上。这工作正常并且适用于 example.com
和 www.example.com
.
我在 https://www.example.com/api/v1/
也有一个 REST API (pip install djangorestframework
) 运行ning。这也很好用。
我想从子域 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/ [L]
我已经尝试了这个想法的几种变体,但都无济于事。我也玩过 HTTPS on/off
,但没有真正的好处。
我读了几个地方,使用 mod_proxy
可以做到这一点,但是当我走这条路时,API 在所需的 [=66 处可用(经过相当多的调整) =] (https://api.example.com
) 但我的静态内容 none 在那里,当我在 Django REST Framework UI 中点击一个亲戚 link 时,我会得到 404s 因为它正在查看:
https://api.example.com/api/v1/
Django 抱怨的是:/api/v1/api/v1/
我想我想做的就是让 https://api.example.com
成为 API 的基础 URL 就好像它是 https://www.example.com/api/v1/
.
导致发现 django-hosts
包的重复项:
Django subdomain configuration for API endpoints
我一直在玩这个,它显示出希望,虽然我还没有 "solved" 我的问题。我计划在获得更多要分享的信息后编辑此答案。同时,如果有人使用 django-hosts
来解决我原来的问题,请在此处添加您的答案或至少发表一些评论!
几天来我一直在搜索关于这个主题的信息,但我一直 运行 遇到障碍。
我在 www.example.com
有一个 Django 网站和应用程序 运行ning,我强制使用 HTTPS。它使用 WSGI 部署在 Apache 2.2 上。这工作正常并且适用于 example.com
和 www.example.com
.
我在 https://www.example.com/api/v1/
也有一个 REST API (pip install djangorestframework
) 运行ning。这也很好用。
我想从子域 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/ [L]
我已经尝试了这个想法的几种变体,但都无济于事。我也玩过 HTTPS on/off
,但没有真正的好处。
我读了几个地方,使用 mod_proxy
可以做到这一点,但是当我走这条路时,API 在所需的 [=66 处可用(经过相当多的调整) =] (https://api.example.com
) 但我的静态内容 none 在那里,当我在 Django REST Framework UI 中点击一个亲戚 link 时,我会得到 404s 因为它正在查看:
https://api.example.com/api/v1/
Django 抱怨的是:/api/v1/api/v1/
我想我想做的就是让 https://api.example.com
成为 API 的基础 URL 就好像它是 https://www.example.com/api/v1/
.
导致发现 django-hosts
包的重复项:
Django subdomain configuration for API endpoints
我一直在玩这个,它显示出希望,虽然我还没有 "solved" 我的问题。我计划在获得更多要分享的信息后编辑此答案。同时,如果有人使用 django-hosts
来解决我原来的问题,请在此处添加您的答案或至少发表一些评论!