2016-09-11 1 views
0

Apache 2.4를 mod_macro과 함께 사용하고 있습니다. documentation에 따르면 동일한 구성 블록을 다시 쓰지 않으려면 여러 매크로를 인스턴스화 할 수 있습니다. 문서에서 예제 :Apache 2.4 mod_macro가 정의 된 모든 매크로를 인스턴스화하지 않습니다.

<Macro VHost $name $domain> 
    <VirtualHost *:80> 
    ServerName $domain 
    ServerAlias www.$domain 

    DocumentRoot "/var/www/vhosts/$name" 
    ErrorLog "/var/log/httpd/$name.error_log" 
    CustomLog "/var/log/httpd/$name.access_log" combined 
    </VirtualHost> 
</Macro> 

Use VHost example example.com 
Use VHost myhost hostname.org 
Use VHost apache apache.org 

나는 다음과 같은 VirtualHost 구성 파일, 내 서버에 대해 동일한했다

<Macro VHost $request_uri> 
    <VirtualHost *:80> 
     ServerAdmin [email protected] 
     DocumentRoot /var/www/html 

     ErrorLog ${APACHE_LOG_DIR}/error.log 
     CustomLog ${APACHE_LOG_DIR}/access.log combined 

     DBDriver mysql 
     DBDParams "host=localhost port=3306 user=myself pass=myselfpass dbname=apacheauth" 
     DBDMin 2 
     DBDKeep 4 
     DBDMax 10 
     DBDExptime 300 

     <Location $request_uri> 
      AuthName $request_uri 
      AuthType Digest 
      AuthDigestAlgorithm MD5 
      AuthDigestDomain/
      AuthDigestProvider dbd 
      AuthDBDUserRealmQuery "SELECT MD5(password) FROM password WHERE username = %s AND realm = %s" 
      Require valid-user 
     </Location> 

    </VirtualHost> 
</Macro> 

Use VHost /test 
Use VHost /anothertest 

prolem 구성 작업 내가 나에게 묻는 www.mysite.com/test에 액세스 할 때이다 자격 증명을 묻지 않고 현재 페이지를 보여주는 www.mysite.com/anothertest에 액세스하려고하면 자격 증명이 작동하지 않습니다. 서버가 첫 번째 Use 지시문에 대해서만 VirtualHost을 인스턴스화하는 것처럼 보이며 다음을 모두 건너 뜁니다.

답변

0

이것은 mod_macro에서는 문제가 아니지만 가상 호스트 자체에서는 문제가되지 않습니다. 당신이 손으로 그들을 밖으로 확장하면이 설정을 얻을 :

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/html 

    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    DBDriver mysql 
    DBDParams "host=localhost port=3306 user=myself pass=myselfpass dbname=apacheauth" 
    DBDMin 2 
    DBDKeep 4 
    DBDMax 10 
    DBDExptime 300 

    <Location /test> 
     AuthName /test 
     AuthType Digest 
     AuthDigestAlgorithm MD5 
     AuthDigestDomain/
     AuthDigestProvider dbd 
     AuthDBDUserRealmQuery "SELECT MD5(password) FROM password WHERE username = %s AND realm = %s" 
     Require valid-user 
    </Location> 
</VirtualHost> 

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/html 

    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    DBDriver mysql 
    DBDParams "host=localhost port=3306 user=myself pass=myselfpass dbname=apacheauth" 
    DBDMin 2 
    DBDKeep 4 
    DBDMax 10 
    DBDExptime 300 

    <Location /anothertest> 
     AuthName /anothertest 
     AuthType Digest 
     AuthDigestAlgorithm MD5 
     AuthDigestDomain/
     AuthDigestProvider dbd 
     AuthDBDUserRealmQuery "SELECT MD5(password) FROM password WHERE username = %s AND realm = %s" 
     Require valid-user 
    </Location> 
</VirtualHost> 

당신은 요청을 구분하기 위해이 같은 IP 주소 (*)와 포트 (:80)에서 수신 가상 호스트없이 ServerName 또는 ServerAlias 있습니다. 요청이 들어 오면 Apache는 첫 번째로 일치하는 가상 호스트를로드하므로 두 번째 가상 호스트가 실행되지 않습니다.

매크로 내부에 <VirtualHost>을 사용하는 것은 단지 예일 뿐이며 원하는 블록을 생성 할 수 있습니다. 이 매크로 하나의 가상 호스트가 그 안에 두 배 확장

<Macro ProtectDirectory $request_uri> 
    <Location $request_uri> 
     AuthName $request_uri 
     AuthType Digest 
     AuthDigestAlgorithm MD5 
     AuthDigestDomain/
     AuthDigestProvider dbd 
     AuthDBDUserRealmQuery "SELECT MD5(password) FROM password WHERE username = %s AND realm = %s" 
     Require valid-user 
    </Location> 
</Macro> 

당신은 다음 것 :

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/html 

    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    DBDriver mysql 
    DBDParams "host=localhost port=3306 user=myself pass=myselfpass dbname=apacheauth" 
    DBDMin 2 
    DBDKeep 4 
    DBDMax 10 
    DBDExptime 300 

    Use ProtectDirectory /test 
    Use ProtectDirectory /anothertest 
</VirtualHost> 
그것은 당신이 실제로 제한 디렉토리를 정의하는 매크로 원한 것처럼 보인다