在Linux conf文件中替换字符串(变量)?

在Linux conf文件中替换字符串(变量)?

我有一个 apache2 虚拟主机的配置文件。对于每个虚拟主机,我都有一个如下所示的配置文件:

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"

我的想法是,在文件顶部指定域名,以避免进一步出现任何错误。

希望这是有意义的。

谢谢。

答案1

或者,如果您的大多数虚拟主机都遵循类似的模板,则可以使用 mod_macro。我最近为具有 200 多个类似虚拟主机的 apache 安装设置了它,它运行良好。

你的例子将被重写如下:( /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

这里还有一些例子。

相关内容