V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mornlight
V2EX  ›  问与答

请教一个关于 Django 多个 App 多个独立域名的问题

  •  
  •   mornlight · 2014-11-02 02:02:37 +08:00 · 6415 次点击
    这是一个创建于 3457 天前的主题,其中的信息可能已经有所发展或是发生改变。
    django一般都是在urls.py 里映射url对应的view,比如:

    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', views.index),
    url(r'^signup/$', views.signup),

    我使用的是uwsgi来跑python,在nginx处理请求:
    location / {
    root /data/www/django;
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9091;
    }

    这样的话,nginx里server的域名是可以正常使用的。

    有一个需求是:我又增加了一个新的 App 在这个 django 项目里,它的路径是 /app/ 我希望把这个项目使用另一个独立的域名,而不是一个域名下的子目录,django本身配合nginx有办法做到吗?

    自己目前想了一个办法是通过 nginx 代理实现的:
    listen 8233;
    server_name 127.0.0.1;

    除了端口server_name外,其他配置和上面那个django项目本身一样,再对需要新增的域名做处理:

    server {
    listen 80;
    server_name www.app.com;
    location / {
    proxy_redirect off;
    proxy_pass http://127.0.0.1:8233/app/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_connect_timeout 20s;
    proxy_read_timeout 20s;
    proxy_send_timeout 20s;
    proxy_buffer_size 64k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
    proxy_ignore_client_abort on;
    }
    }

    就是做了2层处理,可以实现我想要的效果,原来第一个域名+/app/ 也是可以同样访问的。

    有没有其他更好的方式能实现?同时怎么最方便地屏蔽掉 第一个域名+/app/ 的访问方式?

    搜了很久没找到类似的内容,另外,django官方的doc好像被墙了,主页正常。我这里上海电信、教育网、阿里云都ping不到ip了,香港的vps可以: https://docs.djangoproject.com/
    1 条回复    2014-11-12 15:02:13 +08:00
    odysseus
        1
    odysseus  
       2014-11-12 15:02:13 +08:00
    问得这么详细的问题,竟然没人回复!
    试试django-hosts, pip install django-hosts
    怒答之!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   867 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:36 · PVG 05:36 · LAX 14:36 · JFK 17:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.