Назад | Перейти на главную страницу

подставить строку (переменные) в файл conf linux?

У меня есть файл конфигурации для виртуальных хостов apache2. Для каждого виртуального хоста у меня есть файл conf, который выглядит так:

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>

Как я могу указать myDomain в одном месте и повторно использовать эту строку. т.е.

mydomain = "www.SomeDomainIHave.com"

Идея состоит в том, что я указываю домен один в верхней части файла, чтобы избежать ошибок в дальнейшем.

Надеюсь, это имеет смысл.

Спасибо.

Напрямую нельзя. Однако, если у вас есть много таких параметров, которые вы хотите установить, тогда подойдет подход на основе шаблонов. Используйте m4 / sed / ruby ​​/ python для замены переменных в ваших файлах. Обратной стороной является то, что у вас должен быть процесс для восстановления файлов, когда вы что-то меняете, но это можно автоматизировать.

В качестве альтернативы, если большинство ваших хостов используют похожие шаблоны, вы можете использовать mod_macro. Я недавно настроил это для установки apache с более чем 200 похожими хостами, и он работает как шарм.

Ваш пример будет переписан следующим образом: (/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>

Используя макрос: (/etc/apache2/sites-available/drupal.sites.conf)

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

Вы не можете сделать это напрямую в apache. Вам придется использовать другой процесс для создания файлов конфигурации apache.

взгляните на инструменты управления конфигурацией, такие как Кукольный или Повар. Это позволит вам определять шаблоны файлов конфигурации и перестраивать их, когда вы вносите какие-либо изменения в настройки. Затем вы можете определить общие настройки, такие как имя домена, и повторно использовать его в своих шаблонах. Эти инструменты затем развернут новую конфигурацию и перезапустят ваши веб-службы. Только не изобретайте велосипед снова, написав свой собственный инструмент управления конфигурацией (кто еще этого не делал, кстати? :))

невозможно использовать переменные, как уже сказала Келтия, но, возможно, mod_vhost_alias может помочь вам с вашей проблемой.

<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 в этом примере будет заменен на www.commercial.isp.com.

Вот еще несколько примеров.