Django의 여러 설치 - Webserver (lighttpd)를 통해 투명 멀티 플렉스를 구성하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/322694

문제

이 질문은 다음에 대한 답에서 나옵니다.한 서버에서 Django 용 별도의 데이터베이스를 사용하여 여러 계정을 어떻게 설정합니까?

나는 Google이나 다른 곳에서 이와 같은 것을 보지 못했기 때문에 (아마도 어휘가 잘못되었을 것입니다), Intop는 인터넷 담론에 귀중한 추가가 될 수 있다고 생각합니다.

서버를 어떻게 구성 할 수 있습니까?

  • LightTPD의 하나의 설치
  • 다수의 Django 프로젝트는 FastCGI로 실행됩니다
  • Django 프로젝트는 마음대로 추가/제거 될 수 있으며 웹 서버를 다시 시작할 필요가 없습니다.
  • 현재 사용자에 따라 특정 Django 설치에 대한 모든 요청/응답의 투명한 리디렉션

IE 주어진 Django 프로젝트 (해당 FastCGI 소켓 포함) :

  • 밥 (/tmp/bob.fcgi)
  • Sue (/tmp/sue.fcgi)
  • Joe (/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/ 로그인 된 사용자에 따라 요청을 올바른 Django 응용 프로그램으로 지시합니다.

다시 말해, http://www.example.com Bob이 로그인하면 " /tmp/bob.fcgi", /tmp/joe.fcgi Joe가 로그인되면, /tmp/sue.fcgi Sue가 로그인하면 로그인하면 로그인하지 않으면 로그인하면 로그인하면 IT 로그인 페이지로 리디렉션해야합니다.

다음 알고리즘을 사용하여 Demultiplexing "Plexer"FastCGI 스크립트를 고려했습니다.

  1. 쿠키 $ plex가 설정된 경우 /tmp/$Plex.fcgi에 파이프 요청

  2. 그렇지 않으면 로그인 페이지로 리디렉션합니다 (username => plex의 다중 매핑을 기반으로 쿠키 플렉스를 설정합니다.

물론 보안 문제로 $ plex는 오염되어야하며 $ plex는 신뢰의 추정을 일으키지 않아야합니다.

LightTPD 구성은 LIKESO입니다 (Apache, Nginx 등을 쉽게 사용할 수 있음) :

fastcgi.server = ( "plexer.fcgi" =>
                           ( "localhost" =>
                             (   
                               "socket" => "/tmp/plexer.fcgi",
                               "check-local" => "disable"
                             )
                           )   
                 )

입력과 생각, 유용한 링크 및 FastCGI 플렉서를 올바르게 구현하는 방법을 모두 알면 모두 감사 할 것입니다.

고맙습니다.

도움이 되었습니까?

해결책

내가 이것을 어떻게 해결했는지는 다음과 같습니다.

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를 말하는 것으로 추정됩니다.

계정 이름에 대해 어떤 종류의 오염을 확인해야합니다 (나는 이것들을 생성합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top