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

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

Eu tenho um arquivo de configuração para hosts virtuais do Apache2. Para cada virtuahost eu tenho um arquivo conf parecido com este:

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 local e reutilizar essa string. ou seja

mydomain = "www.SomeDomainIHave.com"

A ideia é que eu especifique o domínio no topo do arquivo para evitar erros mais abaixo.

Espero que isso faça sentido.

Obrigado.

Responder1

Alternativamente, se a maioria dos seus vhosts seguirem modelos semelhantes, você poderá usar mod_macro. Recentemente, configurei isso para uma instalação do Apache com mais de 200 vhosts semelhantes e está funcionando perfeitamente.

Seu exemplo seria reescrito como tal: ( /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

Responder2

Diretamente você não pode. No entanto, se você tiver muitos parâmetros que deseja definir, uma abordagem baseada em modelo poderá servir. 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 você altera alguma coisa, mas isso pode ser automatizado.

Responder3

dê uma olhada nas ferramentas de gerenciamento de configuração comoFantocheouChefe de cozinha. Isso permitirá que você defina modelos de arquivos de configuração e os reconstrua quando fizer alterações na configuração. Você pode então definir configurações genéricas, como nome de domínio, e reutilizá-las em seus modelos. Essas ferramentas implantariam uma nova configuração e reiniciariam seus serviços web. Só não reinvente a roda novamente escrevendo sua própria ferramenta de gerenciamento de configuração (quem ainda não fez isso, aliás? :))

Responder4

não é possível usar variáveis ​​como Keltia já disse, mas talvezmod_vhost_aliaspode ajudá-lo com 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>

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

aquisão mais alguns exemplos.

informação relacionada