这个问题从答案流向:How does one set up multiple accounts with separate databases for Django on one server?
我在谷歌或其他地方没有看到这样的事情(也许我的词汇量不对),所以我认为输入可能是互联网话语的一个有价值的补充。
如何配置服务器likeo:
即。给定Django项目(带有相应的FastCGI套接字):
Django项目以一个(过度简化的)脚本开始,喜欢:
#!/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/将请求定向到正确的Django应用程序,具体取决于登录的用户。
换句话说,如果登录了bob,http://www.example.com应该是“bet”/tmp/bob.fcgi,如果登录了jo,则为/tmp/joe.fcgi,如果是,则为/tmp/sue.fcgi。登录。如果没有人登录,它应该重定向到登录页面。
我已经考虑使用以下算法解复用“plexer”FastCGI脚本:
如果设置了Cookie $ PLEX,请将管道请求发送到/tmp/$PLEX.fcgi
否则重定向到登录页面(根据用户名=> PLEX的多对一映射设置Cookie PLEX)
当然,为了安全起见,应该对PLEX进行污点检查,而且PLEX不应该引起任何信任推定。
Lighttpd配置会比较喜欢(尽管Apache,Nginx等可以轻松使用):
fastcgi.server = ( "plexer.fcgi" =>
( "localhost" =>
(
"socket" => "/tmp/plexer.fcgi",
"check-local" => "disable"
)
)
)
输入和想法,有用的链接以及如何正确实现FastCGI plexer都将受到赞赏。
谢谢。
答案 0 :(得分:1)
以下是我如何解决这个问题:
在lighttpd.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映射到/tmp/user-socket-abc1.scgi,其中可能是用户abc1的Django实例正在与SCGI进行对话。
显然必须对帐户名称进行某种污点检查(我生成这些)。