¿Sustituyendo una cadena (variables) en un archivo de configuración de Linux?

¿Sustituyendo una cadena (variables) en un archivo de configuración de Linux?

Tengo un archivo de configuración para los hosts virtuales apache2. Para cada virtuahost tengo un archivo conf que se ve así:

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>

¿Cómo puedo especificar miDominio en un solo lugar y reutilizar esta cadena? es decir

mydomain = "www.SomeDomainIHave.com"

La idea es que especifique el dominio en la parte superior del archivo para evitar errores más abajo.

Espero que esto tenga sentido.

Gracias.

Respuesta1

Alternativamente, si la mayoría de sus vhosts siguen plantillas similares, puede usar mod_macro. Recientemente configuré esto para una instalación de Apache con más de 200 vhosts similares y está funcionando de maravilla.

Su ejemplo se reescribiría 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 la macro: ( /etc/apache2/sites-available/drupal.sites.conf )

Include /etc/apache2/macro.d/drupal.vhost.conf
Use drupal0 mydomain.co.uk

Respuesta2

Directamente no puedes. Sin embargo, si tiene muchos de esos parámetros que desea establecer, entonces un enfoque basado en plantillas puede ser suficiente. Utilice m4/sed/ruby/python para sustituir variables en sus archivos. La desventaja es que debes tener un proceso para regenerar los archivos cuando cambias algo, pero eso puede automatizarse.

Respuesta3

Eche un vistazo a las herramientas de gestión de configuración comoMarionetaoCocinero. Estos le permitirán definir plantillas de archivos de configuración y reconstruirlas cuando realice cambios en la configuración. Luego puede definir configuraciones genéricas, como el nombre de dominio, y reutilizarlas en sus plantillas. Luego, estas herramientas implementarían una nueva configuración y reiniciarían sus servicios web. Simplemente no reinventes la rueda nuevamente escribiendo tu propia herramienta de administración de configuración (¿quién no lo ha hecho todavía, por cierto? :))

Respuesta4

No es posible utilizar variables como ya dijo Keltia, pero quizásmod_vhost_aliaspuede ayudarte con tu 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>

%0en este ejemplo se sustituirá por www.commercial.isp.com.

aquíson algunos ejemplos más.

información relacionada