substituindo uma string (variáveis) em um arquivo conf linux?

3

Eu tenho um arquivo de configuração para o apache2 virtualhosts. Para cada virtuahost eu tenho um arquivo conf que se parece com isto:

NameVirtualHost mydomain.co.uk:80

<VirtualHost mydomain.co.uk:80>
        DocumentRoot /home/d/r/drupal/web/public_html
        ServerName mydomain.co.uk
        ServerAlias www.mydomain.co.uk
        ErrorLog /var/log/apache2/sites/mydomain.co.uk_error-log
        CustomLog /var/log/apache2/sites/mydomain.co.uk_access-log "combined"

        # Rewrite the www
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www\.mydomain.co.uk/?$ [NC]
        RewriteRule ^(.*)$ http://mydomain.co.uk$1 [L,R=301]

        # Read in the drupal configuration
        Include conf.d/drupal6.conf

        # Block access while developing
#       Include conf.d/beta.conf

</VirtualHost>

Como posso especificar myDomain em um único lugar e reutilizá-lo. ou seja,

mydomain = "www.SomeDomainIHave.com"

A ideia é que eu especifique o domínio um na parte superior do arquivo para evitar erros maiores.

Espero que isso faça sentido.

Obrigado.

    
por belliez 26.01.2010 / 11:34

5 respostas

1

Alternativamente, se a maioria de seus vhosts estão seguindo modelos similares, você pode usar o mod_macro. Recentemente, configurei isso para uma instalação do apache com mais de 200 vhosts semelhantes e está funcionando como um encanto.

O seu exemplo seria reescrito da seguinte forma: (/etc/apache2/macro.d/drupal.vhost.conf (

<Macro drupal0 $domain>
NameVirtualHost $domain:80

<VirtualHost $domain:80>
        DocumentRoot /home/d/r/drupal/web/public_html
        ServerName $domain
        ServerAlias www.$domain
        ErrorLog /var/log/apache2/sites/$domain_error-log
        CustomLog /var/log/apache2/sites/$domain_access-log "combined"

        # Rewrite the www
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www\.$domain/?$ [NC]
        RewriteRule ^(.*)$ http://$domain$1 [L,R=301]

        # Read in the drupal configuration
        Include conf.d/drupal6.conf

        # Block access while developing
#       Include conf.d/beta.conf
</VirtualHost>
</Macro>

Usando a macro: (/etc/apache2/sites-available/drupal.sites.conf)

Include /etc/apache2/macro.d/drupal.vhost.conf
Use drupal0 mydomain.co.uk
    
por 30.01.2010 / 16:20
1

Diretamente você não pode. No entanto, se você tiver alguns desses parâmetros que deseja definir, uma abordagem baseada em modelos pode fazer. Use m4 / sed / ruby / python para substituir variáveis em seus arquivos. A desvantagem é que você deve ter um processo para regenerar os arquivos quando mudar alguma coisa, mas isso pode ser automatizado.

    
por 26.01.2010 / 11:38
0

Veja as ferramentas de gerenciamento de configuração, como Puppet ou Chef . Eles permitirão que você defina modelos de arquivo de configuração e os reconstrua quando fizer alterações na configuração. Você pode definir configurações genéricas como nome de domínio e reutilizá-lo em seus modelos. Essas ferramentas, em seguida, implantam nova configuração e reiniciam seus serviços da web. Apenas não reinvente a roda novamente escrevendo sua própria ferramenta de gerenciamento de configuração (quem ainda não fez isso, por favor? :))

    
por 28.01.2010 / 09:37
0

Você não pode fazer isso diretamente no apache. Você terá que usar algum outro processo para gerar os arquivos de configuração do apache.

    
por 28.01.2010 / 11:38
0

não é possível usar variáveis como Keltia já disse, mas talvez mod_vhost_alias possa ajudar você com o seu problema.

<VirtualHost 111.22.33.44>
  ServerName www.commercial.isp.com

  CustomLog logs/access_log.commercial vcommon

  VirtualDocumentRoot /www/commercial/%0/docs
  VirtualScriptAlias /www/commercial/%0/cgi-bin
</VirtualHost>

%0 neste exemplo substituirá www.commercial.isp.com .

aqui são mais alguns exemplos.

    
por 26.01.2010 / 12:19