Pergunta

O que vem boa (ou pelo menos inteligentes) formas de executar vários sites de um único framework web, comum Python (ou seja: Pilões, TurboGears, etc)? Eu sei que você pode fazer o redirecionamento com base no domínio ou caminho para reescrever o URI para apontar para uma localização específica do local e eu também vi alguns "if site == 'site1' / elseif / elseif / etc" brutal que eu gostaria de evitar.

Foi útil?

Solução

Django tem esta embutido. Consulte o framework sites .

Como uma técnica geral, incluem uma coluna de 'host' no seu esquema de banco de dados anexado aos dados que você quer ser específico do host, em seguida, incluir o Host cabeçalho HTTP na consulta quando você está recuperando dados.

Outras dicas

Usando Django no Apache com mod_python, múltiplos host I (não relacionada) Django locais simplesmente com o seguinte apache config:

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site1
        ServerName site1.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site1.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site1
        </Location>
</VirtualHost>

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site2
        ServerName site2.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site2.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site2
        </Location>
</VirtualHost>

Não há necessidade de várias instâncias Apache ou servidores proxy. Usando uma directiva PythonInterpreter diferente para cada site (o nome digitado é arbitrária) mantém os namespaces separados.

Eu uso CherryPy como meu servidor web (que vem com Turbogears), e eu simplesmente executar várias instâncias do servidor web CherryPy em diferentes portos ligados a localhost. Então eu configurar o Apache com mod_proxy e mod_rewrite aos pedidos de forma transparente para a frente para a porta apropriada com base na solicitação HTTP.

Usando várias instâncias de servidor em portas locais é uma boa idéia, mas você não precisa de um servidor web cheio de recursos para solicitações de redirecionamento HTTP.

Gostaria de usar libra como um proxy reverso para fazer o trabalho. É pequeno, rápido, simples e faz exatamente o que precisamos aqui.

O QUE libra é:

  1. um reverse-proxy:. Passa solicitações de navegadores cliente para um ou mais servidores de back-end
  2. um balanceador de carga:. Ele vai distribuir os pedidos dos navegadores cliente entre vários servidores back-end, mantendo as informações da sessão
  3. um SSL de fardos:. Pound irá descriptografar HTTPS solicitações de navegadores cliente e passá-los como HTTP simples para os servidores back-end
  4. um HTTP / HTTPS desinfetante:. Pound vai verificar pedidos de correção e aceitar aqueles única bem formadas
  5. um failover do servidor:. Deve um servidor back-end falhar, Pound tomará nota do fato e parada passando solicitações para ele até que ele recupera
  6. um redirecionador pedido:. Pedidos podem ser distribuídos entre os servidores de acordo com a URL solicitada
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top