Apache가 단일 <위치>를 통해 여러 디렉토리를 제공하도록하십시오.

StackOverflow https://stackoverflow.com/questions/668150

  •  21-08-2019
  •  | 
  •  

문제

나는 많은 양의 가상 호스트를 제공하는 데 문제가 있으며보다 효율적인 일을하는 방법이 있는지 궁금합니다.

현재 위치 지침을 사용하여 여러 부서의 대량 프로젝트, 총 19 개의 부서에서 300 개가 넘는 프로젝트를 제공하고 있습니다. 구조는 파일이 제공되는 디렉토리를 제외하고 모든 위치 지침에 대해 동일합니다. 내가 현재 가지고있는 것은 다음과 같이 보이는 큰 파일입니다.

<VirtualHost *> 
   ServerName www.myserver.com 

   <Location /departmentA/project1> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/departmentA/project1/passwords 
      Require valid-user 
   </Location> 

   <Location /departmentA/project2> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/departmentA/project2/passwords 
      Require valid-user 
   </Location> 

   <Location /departmentB/project1> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/departmentA/project1/passwords 
      Require valid-user 
   </Location> 
</VirtualHost>

보시다시피 경로를 제외 하고이 모든 구조는 동일합니다. 내가 원하는 것은 물론 부서와 프로젝트 이름에 변수를 사용할 수 있고 단일 위치 지침을 유지할 수있는 것입니다. 나는 이것이 서버와 메모리에서도 덜 무겁다고 가정합니다.

<VirtualHost *> 
   ServerName www.myserver.com 

   <Location /$1/$2> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/$1/$2/passwords 
      Require valid-user 
   </Location> 
</VirtualHost>
도움이 되었습니까?

해결책

나는 생각하지 않는 것처럼 구체적으로 할 수있는 방법을 모른다 AuthUserFile 역동적 인 논증을 받아들입니다. 선택한 언어로 작은 스크립트를 작성하는 것이 가장 쉬울 수 있습니다. <Location> 보호하려는 각 디렉토리에 대해 차단하고 반복합니다. 예를 들어, 파이썬에서 :

#!/usr/bin/python
import sys
print '<VirtualHost *:80>'
print '   ServerName www.myserver.com'
for path in sys.stdin:
    print '   <Location /%s>' % path.strip()
    print '      AuthType Basic'
    print '      AuthName "By Invitation Only"'
    print '      AuthUserFile /usr/local/%s/passwords' % path.strip()
    print '      Require valid-user'
    print '   </Location>'
print '</VirtualHost>'

'Departmenta/Project1'형식의 각 라인에 대해 표준 입력에 읽히면 해당하는 것을 인쇄합니다. <Location> 부분.

다른 팁

당신은 시도 했습니까? u003CLocationMatch>지령?

경로 대신 정규 표현이 필요합니다. 당신의 경로와 관련 하위 옵션에 따라 수백 개의 지침을보다 관리하기 쉬운 소수의 소수로 줄일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top