Ersetzen einer Zeichenfolge (Variablen) in einer Linux-Konfigurationsdatei?

Ersetzen einer Zeichenfolge (Variablen) in einer Linux-Konfigurationsdatei?

Ich habe eine Konfigurationsdatei für virtuelle Apache2-Hosts. Für jeden virtuellen Host habe ich eine Konfigurationsdatei, die folgendermaßen aussieht:

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>

Wie kann ich meine Domain an einer einzigen Stelle angeben und diese Zeichenfolge wiederverwenden?

mydomain = "www.SomeDomainIHave.com"

Die Idee dahinter ist, dass ich die Domäne oben in der Datei angebe, um weiter unten auftretende Fehler zu vermeiden.

Hoffe, das ist verständlich.

Danke.

Antwort1

Wenn die meisten Ihrer virtuellen Hosts ähnlichen Vorlagen folgen, können Sie alternativ mod_macro verwenden. Ich habe dies kürzlich für eine Apache-Installation mit über 200 ähnlichen virtuellen Hosts eingerichtet und es funktioniert einwandfrei.

Ihr Beispiel würde wie folgt umgeschrieben: ( /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>

Verwenden des Makros: (/etc/apache2/sites-available/drupal.sites.conf)

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

Antwort2

Direkt geht das nicht. Wenn Sie jedoch viele solcher Parameter festlegen möchten, reicht ein vorlagenbasierter Ansatz aus. Verwenden Sie m4/sed/ruby/python, um Variablen in Ihren Dateien zu ersetzen. Der Nachteil ist, dass Sie einen Prozess zum Neugenerieren der Dateien benötigen, wenn Sie etwas ändern, aber das kann automatisiert werden.

Antwort3

Schauen Sie sich Konfigurationsmanagement-Tools an wieMarionetteoderKoch. Damit können Sie Vorlagen für Konfigurationsdateien definieren und diese neu erstellen, wenn Sie Änderungen an den Einstellungen vornehmen. Sie können dann allgemeine Einstellungen wie den Domänennamen definieren und in Ihren Vorlagen wiederverwenden. Diese Tools würden dann eine neue Konfiguration bereitstellen und Ihre Webdienste neu starten. Erfinden Sie das Rad nicht neu, indem Sie Ihr eigenes Konfigurationsverwaltungstool schreiben (wer hat das übrigens noch nicht gemacht? :) )

Antwort4

es ist nicht möglich, Variablen zu verwenden, wie Keltia bereits sagte, aber vielleichtmod_vhost_aliaskann Ihnen bei Ihrem Problem helfen.

<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>

%0wird in diesem Beispiel durch ersetzt www.commercial.isp.com.

Hiersind einige weitere Beispiele.

verwandte Informationen