这个问题从流的答案:如何设置多个账户有独立的数据库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脚本用下列算法:

  1. 如果cookie$丛设定,管请求/tmp/$丛。fcgi

  2. 否则,重新定向,以登录网页(其中规定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产生这些).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top