É possível usar variáveis nos arquivos de configuração do Apache?
Por exemplo, quando estou configurando um site com Django + WSGI, o arquivo de configuração pode se parecer com:
<Directory /path/to/foo/>
Order allow,deny
Allow from all
</Directory>
Alias /foo/static /path/to/foo/static
WSGIScriptAlias /foo /path/to/foo/run_wsgi
E eu gostaria de transformar o '/ path / to / foo' em uma variável para que ele precise ser definido em um único local. Algo como:
Variable FOO /path/to/foo
…
Obrigado!
apache-2.2
David Wolever
fonte
fonte
Muito mais simples usando
Define
palavras-chave. Consulte Definir diretiva ....
fonte
The variable is always globally defined and not limited to the scope of the surrounding config section.
provavelmente significa (não testei por enquanto) que, se você tiver vários vhosts, não poderá usar a mesma variável (com um valor diferente) para cada um.Você pode ativar ou desativar bits de configuração com o IfDefine, mas isso provavelmente não fará o que você deseja. Em vez disso, você pode definir variáveis de ambiente no script init do Apache para acessar dentro da configuração. Por exemplo, adicionando:
para
/etc/init.d/httpd
(antes da linha que chamahttpd
!) em uma máquina RHEL passa o nome do host da máquina como uma variável. Não precisa ser a saída de um comando - tudo o que define uma variável no ambiente que iniciahttpd
é bom. As variáveis podem ser usadas na configuração da seguinte maneira:Claro, você não está restrito à
Header
diretiva. As variáveis podem ser usadas em qualquer lugar, como<Directory ${FOO}>
etc.Se você não gosta disso (e isso não é legal ..), você pode gerar uma configuração a partir de um modelo usando m4 ou alguma outra linguagem de modelo.
ADICIONAIS :
Hum, uma maneira de torná-lo melhor seria armazenar todas as variáveis em um arquivo externo, talvez
/etc/httpd/conf/variables.txt
:e inclua-os no seu
init.d
script Apache com:antes de ligar
httpd
. Ainda não é brilhante, mas pelo menos separa o script de inicialização e as variáveis.fonte
/etc/sysconfig/httpd
(RedHat, CentOS) ou/etc/apache2/envvars
(Ubuntu / Debian). Algumas variáveis de ambiente já estão lá.Você pode usar variáveis de ambiente do sistema com mod_env e a diretiva PassEnv. Veja aqui
Exemplo para debian:
Inclua sua variável em / etc / apache2 / envvars (esse arquivo é usado pelo apache2ctl para definir variáveis)
Passe sua variável para a configuração do apache
Você pode acessar a variável de ambiente do sistema como se fosse uma variável apache.
fonte
Eu tive o mesmo problema e, depois de algumas pesquisas, a solução para o Apache 2.x que resolveu exatamente para mim (e nada mais) foi a seguinte:
http://people.apache.org/~rjung/mod_define/
Lembre-se de que, após descompactar, você deve compilá-lo assim (a parte de instalação dos documentos parece ter esquecido de aderir ao apache2?):
Então crie
/etc/apache2/mods-available/define.load
:Depois disso, ative o módulo usando
a2enmod
como faria normalmente.Os documentos no link acima mostram como usá-lo. Agora você pode simplesmente definir coisas e usá-las diretamente, tudo dentro da mesma configuração do apache2.
fonte
inacreditável, mas no httpd 2.2 no centos 6.4 isso funciona
exportar envios em / etc / sysconfig / httpd
então simplesmente faça isso ...
então finalmente ....
fonte
/etc/sysconfig/httpd
conteúdo entrahttpd -D
(o equivalente àdefine
diretiva) que define variáveis apache.Você pode procurar no mod_passenger o apache, que também pode hospedar aplicativos django. Nós o usamos com grande sucesso. Tudo o que você precisa fazer no vhost é, hmm, exatamente nada. A única coisa que você precisa é criar um diretório "público" na raiz do aplicativo e criar links simbólicos em "público" para seus diretórios estáticos como "mídia" (isso aumentará o desempenho da veiculação estática) e aponte seu DocumentRoot para ele.
Em seguida, coloque o seguinte arquivo em "public /../ passenger_wsgi.py":
Ligue o seu navegador: Funciona!
fonte