Linux conf 파일에서 문자열(변수)을 대체합니까?

Linux conf 파일에서 문자열(변수)을 대체합니까?

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을 한 곳에서 지정하고 이 문자열을 재사용하려면 어떻게 해야 합니까? 즉

mydomain = "www.SomeDomainIHave.com"

더 이상 실수를 피하기 위해 파일 상단에 도메인을 지정한다는 아이디어입니다.

이것이 의미가 있기를 바랍니다.

감사해요.

답변1

또는 대부분의 가상 호스트가 유사한 템플릿을 따르는 경우 mod_macro를 사용할 수 있습니다. 저는 최근에 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

다음과 같은 구성 관리 도구를 살펴보십시오.인형또는요리사. 이를 통해 구성 파일 템플릿을 정의하고 설정을 변경할 때 이를 다시 작성할 수 있습니다. 그런 다음 도메인 이름과 같은 일반 설정을 정의하고 이를 템플릿에서 재사용할 수 있습니다. 그런 다음 이러한 도구는 새 구성을 배포하고 웹 서비스를 다시 시작합니다. 자신만의 구성 관리 도구를 작성하여 다시 바퀴를 재발명하지 마세요(누가 아직 이 작업을 수행하지 않았습니까? :))

답변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.

여기더 많은 예가 있습니다.

관련 정보