多安装的Django如何配置透明的多路通过网络服务器(程序)?
题
这个问题从流的答案:如何设置多个账户有独立的数据库Django一个服务器上?
我还没有见过像这样的东西谷歌上或其他地方(也许我们错误的词汇),所以我觉得输入可能是一个有价值的外向互联网上的言论。
怎么可能一个配置服务器likeso:
- 一个安装的程序
- 多Django项目的运行为FastCGI
- Django项目可以加入/拆除,和不应该要求重新启动该网络服务器
- 透明的重新定向的所有请求/回应以一个特定的Django安装取决于当前用户
I.e。鉴于Django项目(与相应的FastCGI socket):
- Bob(/tmp/鲍勃。fcgi)
- 起诉(/tmp/起诉。fcgi)
- 乔(/tmp/joe。fcgi)
Django项目正在开始一个(过于简化)脚本likeso:
#!/bin/sh
NAME=bob
SOCKET=/tmp/$NAME.fcgi
PROTO=fcgi
DAEMON=true
/django_projects/$NAME/manage.py runfcgi protocol=$PROTO socket=$SOCKET
daemonize=$DAEMON
我想要流量来 http://www.example.com/ 直接请求正确的决的应用取决于用户登录。
换句话说, http://www.example.com 应该来了"是"/tmp/鲍勃。fcgi如果鲍勃是登录/tmp/joe。fcgi如果乔登录/tmp/起诉。fcgi如果起诉被登录。如果没有一个记录,它应该重定向到登录网页。
我已经考虑一解"plexer"FastCGI脚本用下列算法:
如果cookie$丛设定,管请求/tmp/$丛。fcgi
否则,重新定向,以登录网页(其中规定cookie丛基于一个许多对一映射的Username=>丛)
当然作为一项安全$丛应该沾染检查,并$丛应该不引起任何推定的信任。
一程序的配置将likeso(虽然Apache服务,等等。可以使用的只是作为容易):
fastcgi.server = ( "plexer.fcgi" =>
( "localhost" =>
(
"socket" => "/tmp/plexer.fcgi",
"check-local" => "disable"
)
)
)
输入和思想的有用链接,并知道如何正确执行FastCGI plexer将所有可以理解的。
谢谢你。
解决方案
在这里约我怎么解决这个:
在程序.conf
$SERVER["socket"] == "localhost:81" {
include_shell "/opt/bin/lighttpd_conf.py"
}
和相应的lighttpd_conf.py:
#!/usr/bin/python
import fileinput
ACCOUNT_LIST_FILE = "/opt/servers/account_list.txt"
for user in fileinput.input(ACCOUNT_LIST_FILE):
print """
$HTTP[\"url\"] =~ \"^/%s/\" {
scgi.server = ( \"/\" =>
(
(
\"socket\" => \"/tmp/user-socket-%s.scgi\",
\"check-local\" => \"disable\",
)
)
)
}
""" % (user, user)
在ACCOUNT_LIST_FILE包含数量的账户,例如
abc1
abc2
abc3
该服务器的地图 http://example.com/abc1 to/tmp/用户插座abc1.scgi,在那里大概一个Django实例户abc1是说SCGI.
一个显然必须进行某种形式的污染检查名字的帐户(I产生这些).