【发布时间】:2012-09-03 20:34:02
【问题描述】:
我有一个名为 myapp 的 django-admin 应用程序,我想在不同的物理盒子上部署多个实例,每个客户一个。但是,我希望它们都可以从类似的域mydomain.com/customer1/myapp 访问。
我已经摆弄了特定的代理设置并尝试了 SO 上建议的多种方法,但没有一种完全适合我的用例……而且由于我对 nginx 和 django 都知之甚少,我不知所措!
我当前的 nginx.conf 是:
server {
listen 80;
server_name myserver.com
location ^~ /static {
alias /path/to/static/files/;
}
# location / {
# proxy_pass http://127.0.0.1:8001;
# }
location ^~ /customer1/myapp/static {
alias /path/to/static/files/;
}
location /customer1/myapp {
rewrite ^/customer1/myapp/(/?)(.*) /$2 break;
proxy_pass http://127.0.0.1:8001;
}
}
我可以通过myserver.com/customer1/myapp/admin 按预期进入登录屏幕。但是,当我尝试登录时,nginx 会将我的 url 重写为 myserver.com/admin,这不是有效的 url。如何防止 nginx 实际重写 url,而只更改传递给 127.0.0.1:8001 的 url?
FWIW,我正在使用 gunicorn 服务于 gunicorn -b 127.0.0.1:8001 -n myapp。如果我取消注释 / 位置并删除最后两个位置块,该应用程序运行良好。
如果有其他选择,我远未确定这种方法。目标是避免为每个部署修改 django 代码,而只需在 nginx.conf 中添加最少的代码以进行新部署。
【问题讨论】:
-
关于部署的问题可能更适合serverfault.com
-
我不明白,你只是想让 django url 反向生成 /customerX/myapp/admin/ 而不是 /admin/ 吗?
-
@jpic 不,我希望 django 只看到根 url。例如
127.0.0.1:8001/admin。我想我可以用 nginx 做到这一点,但我不知道怎么做。并注意到serverfault.com,如果我在这里没有找到任何东西,我会在那里发布,谢谢。
标签: django url-rewriting nginx django-admin