跨子域拆分Django项目

时间:2014-12-22 20:37:04

标签: django apache nginx reverse-proxy

我目前正在开发一个网站,其中功能需要拆分为单独的子域dashboard.example.comadmin.example.comfacebook.example.com。我希望通过一个Django项目提供一切,因为一切都将使用相同的核心模型。我使用Nginx作为前端代理服务器处理静态文件并将所有其他请求传递给Apache。

我想到的解决方案是通过nginx将每个子域映射到相应的应用程序:

server {
    listen 80;
    server_name dashboard.example.com;
    ...

    location / {
        proxy_pass http://127.0.0.1/dashboard/;
        ...
    }
}

server {
    listen 80;
    server_name admin.example.com;
    ...

    location / {
        proxy_pass http://127.0.0.1/admin/;
        ...
    }
}

...为每个子域执行此操作,有效地将子域映射到其各自的应用程序URL名称空间。我遇到的问题是Django没有意识到映射,所以当它反转一个URL时,它会在它之前添加/dashboard/等,创建像dashboard.example.com/dashboard/dashboard/这样的URL。我想我可以编写一个自定义的reverse函数去除不必要的子目录,但这似乎是一个创可贴。

有没有更好的方法来完成我的需要,或者我应该重组项目?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

Django的网站框架(https://docs.djangoproject.com/en/1.7/ref/contrib/sites/)应该足够了,如果没有,请看看django-subdomains(http://django-subdomains.readthedocs.org/en/latest/)似乎有办法解决你的反向网址(基于Google快速搜索,我自己从未使用过它!)