Eu tenho um código mod_cgi "site.py" que é usado para servir um site. Estou executando várias instâncias deste site em um único servidor apache, cada instância tem seu próprio arquivo de configuração.
Atualmente minha configuração do apache (httpd.conf) contém
ScriptAlias /siteA /path/to/mainA.py # loads configA.txt then runs site.py
ScriptAlias /siteB /path/to/mainB.py # loads configB.txt then runs site.py
ScriptAlias /siteC /path/to/mainC.py # loads configC.txt then runs site.py
. . .
Existe uma maneira melhor de ter vários sites como este? Seria bom ter uma maneira de evitar ter uma entrada httpd.conf para cada site e/ou não precisar de um mainX.py para cada site.
O objetivo é ter que criar/alterar menos arquivos se quiser adicionar outro site ou quando precisar fazer alterações.
A maneira mais fácil é modificar seu script para carregar um arquivo de configuração diferente para cada host virtual.
Como você está usando o mod_cgi , seu script recebe todas as informações relativas à requisição HTTP nas variáveis de ambiente . Existem algumas variáveis CGI padrão disponíveis em todos os ambientes CGI e o Apache adiciona algumas variáveis próprias .
Tudo o que você precisa fazer é ler a variável SERVER_NAME e escolher sua configuração de acordo com algo como:
No lado do Apache você pode usar um default
<VirtualHost>
ou um<VirtualHost>
com todos osServerAlias
'es que você precisa.Edit : Depois de reler sua pergunta, parece que seus sites são subdiretórios do mesmo espaço de URL. Portanto, você precisará verificar SCRIPT_NAME em vez de SERVER_NAME .
Com base no feedback (obrigado Piotr) e pesquisas adicionais, este é o melhor que encontrei. Ainda estou esperando descobrir "a maneira como você deve fazer isso" e apreciaria qualquer contribuição adicional.
Problema: muitas entradas httpd.conf
Solução: Uma única entrada
Talvez publique duas versões do código sitesingle.py e sitemulti.py.
Problema: Uma versão do siteX.py para cada site.
Solução: faça com que site.py (ou sitemulti.py) examine a variável de ambiente SCRIPT_NAME para determinar com a instância do site a ser veiculada.
Problema: Muitos arquivos de configuração.
Solução: Tenha um único arquivo de configuração contendo subseções para cada site conforme indicado no exemplo a seguir:
site.py irá mesclar a subseção do site no espaço de configuração geral. (mais fácil com ConfigObj que suporta subseções e mesclagem).
Problema: Precisa editar site.py para apontá-lo para o arquivo de configuração correto.
Não Boa Solução: Poderia definir uma variável de ambiente em httpd.conf que é lida por site.py (ou sitesingle.py ou sitemulti.py)