Uso de variáveis na configuração do Apache

3

Eu tenho vários arquivos de configuração em grande parte idênticos na configuração do Apache2, para configurar vários subdomínios. Na maioria desses arquivos de configuração, apenas o nome do subdomínio em si é diferente dos outros arquivos e, portanto, eu estou tentando descobrir se é possível definir algum tipo de variável no topo do arquivo de configuração para facilmente definir coisas como ServerName , DocumentRoot , ErrorLog , CustomLog

Um pouco como (o que obviamente não funciona):

subdomain=blog

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName ${subdomain}.example.com
        DocumentRoot /var/www/${subdomain}.example.com/htdocs

        # Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
        LogLevel warn
        ErrorLog /var/log/apache2/${subdomain}.example.com_error.log
        CustomLog /var/log/apache2/${subdomain}.example.com_access.log combined

        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

Uma solução ainda mais inteligente seria se a variável subdomain pudesse ser definida por meio de uma regex do nome do arquivo de configuração.

Eu encontrei Hospedagem virtual em massa configurada dinamicamente , mas ela não descreve exatamente o que eu quero.

Executando o Apache 2.2 no Linux.

    
por jippie 25.11.2012 / 14:31

3 respostas

2

Uma demonstração com o Perl Template::Toolkit (não é necessário aprenda Perl para usar o comando tpage instalado com o módulo):

Arquivo de modelo:

$ cat vhost.tpl
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName [% subdomain %].example.com
        DocumentRoot /var/www/[% subdomain %].example.com/htdocs

        # Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
        LogLevel warn
        ErrorLog /var/log/apache2/[% subdomain %].example.com_error.log
        CustomLog /var/log/apache2/[% subdomain %].example.com_access.log combined
</VirtualHost>

A geração da configuração:

$ tpage --define subdomain=domain.tld --interpolate vhost.tpl
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName domain.tld.example.com
        DocumentRoot /var/www/domain.tld.example.com/htdocs

        # Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
        LogLevel warn
        ErrorLog /var/log/apache2/domain.tld.example.com_error.log
        CustomLog /var/log/apache2/domain.tld.example.com_access.log combined
</VirtualHost>
    
por 24.02.2013 / 18:49
0

Sua opção mais flexível seria usar algum programa externo para criar sua configuração do Apache com base em um modelo. O programa tradicional para isso no Unix seria M4 , embora provavelmente haja algo um pouco menos barroco nos dias de hoje.

    
por 26.11.2012 / 03:40
0

No passado, eu usei o mod_macro para conseguir a maior parte do que você está tentando fazer, mas atualmente eu uso o gerenciamento de configuração (o boneco no meu caso, mas qualquer um deles deve ser capaz de fazer isso). Em seguida, você pode criar suas configurações usando linguagens de script de nível superior.

Existem montes de exemplos de módulos vache de Apache parametrizados para fantoches lá fora.

Então, eu diria que se você já estiver usando o gerenciamento de configuração ou estiver considerando, faça isso, caso contrário, dê uma olhada no mod_macro.

link

    
por 01.04.2013 / 00:24