替換linuxconf檔案中的字串(變數)?

替換linuxconf檔案中的字串(變數)?

我有一個 apache2 虛擬主機的設定檔。對於每個 virtuahost 我都有一個如下所示的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 並重新使用該字串。 IE

mydomain = "www.SomeDomainIHave.com"

我的想法是,我在文件頂部指定網域,以避免進一步出現任何錯誤。

希望這是有道理的。

謝謝。

答案1

或者,如果您的大多數虛擬主機都遵循類似的模板,您可以使用 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

答案2

直接你不能。但是,如果您想要設定許多此類參數,則可以使用基於範本的方法。使用 m4/sed/ruby/python 取代檔案中的變數。缺點是,當您更改某些內容時,您必須有一個重新生成文件的過程,但可以自動化。

答案3

看看組態管理工具,例如木偶或者廚師。這些將允許您定義設定檔模板並在對設定進行任何更改時重建它們。然後,您可以定義網域等通用設定並在範本中重複使用它。然後,這些工具將部署新配置並重新啟動您的 Web 服務。只是不要再次重新發明輪子編寫自己的配置管理工具(誰還沒有這樣做過,順便說一句?:))

答案4

不可能像 Keltia 已經說過的那樣使用變量,但也許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.

這裡還有一些例子。

相關內容