[산밑돌맹이]님이
남기신 글:
>문제의 씨쥐아이를 실행키 위해..
><IfModule mod_alias.c>
>ScriptAlias /cgi-bin/ "/home/aaa/cgi-bin/"
><Directory "/home/aaa/cgi-bin">
> AllowOverride None
> Options ExecCGI
> Order allow,deny
> Allow from all
></Directory>
></IfModule>
>라는 옵션을 섹션3의 Virtual서버 부분의 해당 버추얼서버
디렉토리에다
>하면,,,
>옵션이 작용하는데...
>
>섹션2의 메인서버 부분에다 추가하면 왜 안되는지요?
>제가 알기로는 메인서버부분의
옵션은 섹션3의 버?서버에서 변경하지 않는 한 버?서버까지
유효한줄 알고 있는데...
>
>이렇게 되면,,
>가상도메인이 많다면,,일일히
가상도메인 디렉토리마다 이런 옵션을
>삽입해야 한다는 노가다적(?)인 결론이 나오는데????
>
>제가 뭣을 잘못했는지 잘 모르것는디유....??
>위의 내용대신..메인서버섹션부분
ScriptAlias부분에다가..
>
>ScriptAlias /cgi-bin/ "/home/*/cgi-bin/"
><Directory "home/cgi-bin">
> ...
> Options Ex...
> ....
></Directory>
>하니깐 안되고, 말입니다..제가
알기로는 아파치에서..디렉토리
>표시때,,/*/디렉토리가
작용하는 줄 알고 있는디 말입니당...
>
>그럼 아아아아안....뇽...
>도와주세용....헤헤
========================================
다시 설명을 정리해야 겠군요...
목표는
- 주메인 DocumentRoot 와
- 계정 사용자의 DocumentRoot
에서 둘다 CGI를 허용하는게 맞죠?
URL 주소는
- http://www.domain.com/cgi-bin/
- http://www.domain.com/~ID/cgi-bin/
으로...
[예를 들어]
기본원칙은 ScriptAlias로 지정된 디렉토리에서는
모든 파일을
스크립트로 간주하기 때문에 그림조차도 깨집니다..
이점 명심하시고...
/
Options none
대부분 이렇게 설정되어 있습니다.
/home/httpd
Options ExecCGI
ScriptAlias "/cgi-bin/" "/home/httpd/cgi-bin/"
/home/httpd/cgi-bin
Options ExecCGI
일반적으로도 이렇게 많이 설정합니다..
여기까지 설명을 하자면
/home/httpd/cgi-bin 디렉토리는
확실히 CGI가 실행됩니다. 단 그림은 깨집니다...이유를
아시겠죠?
그리고 /home/httpd 디렉토리는 CGI가 실행될 수 있으며
이 디렉토리는 그림이 깨지지 않습니다....
이 차이를 분명히 구별 해야합니다...
DocumentRoot와 CGI-BIN 디렉토리를 서로 구별하는 이유는
보안상 관례적으로 사용합니다.
그다음 사용자 계정으로 가서..
사용자 계정은 일반적으로 /home/ID/public_html 와 같은
구조를 가집니다..
따라서
/home/httpd/html <--ExecCGI
/home/ID
의 디렉토리는 확연히 틀립니다.
그래서 할 수 있는 방법은
/home 디렉토리에 일괄적으로
ExecCGI 옵션을 주거나 /home/ID/public_html
에도 ExecCGI 옵션을 줘도 됩니다.
각계정의 이름은 모두 틀리므로
<Directory "/home/*/public_html">
Options ExecCGI
...
</Directory>
로 설정해 주면 그림도 깨지지 않고 CGI를 실행시킬수
있습니다.
여기에서 주의할점은
질문한대로
굳지 /home/ID/cgi-bin 디렉토리만
CGI를 실행시키게끔 하려면 모든 각 가상호스트 섹션에
ScriptAlias를 추가해주거나 ExecCGI 옵션을 줘야합니다.
말 그대로 노가다죠...
만약 어떤 가상호스트에서
ScriptAlias 지시자를 추가하지 않고
cgi-bin URL을 호출하면 주메인서버의 cgi-bin 디렉토리를
찾아갑니다.
보안상이니 기타 이유로 CGIWrapper라는프로그램을
이용하는 법도
있는데 굳지 이렇게까지 하지 않아도 될듯 하군요...
정리하면,
주 메인서버에
ScriptAlias "/cgi-bin/" "......"
로 설정하고
각 가상호스트 섹션에 따로 ScriptAlias 지시자를 추가하지
않으면
cgi-bin URL은 주 메인서버의 cgi-bin 디렉토리를 호출한
셈이됩니다.
따라서 주 메인서버에서 ScriptAlias 지시자를 넣었다면
각 가상호스트섹션에
ScriptAlias 지사자를넣어 따로 구별하든지
아니면,
주 메인서버에서 ScriptAlias지시자를
빼고
각 가상호스트 섹션에는 ScriptAlias 지시자를 넣어줘야합니다.
그외 방법이 또 있는데 (제가 권장하는 방법)
굳지 ScriptAlias 지사자를 사용하지 않고
(모두 뺍니다.)
디렉토리 섹션옵션에서
ExecCGI 옵션을 주면 됩니다.
<Directory "/home/*/public_html">
...
Options ExecCGI
...
</Diretory>
물론 /home/httpd/html
에도 ExecCGI 옵션을 추가해야겠지요.
디렉토리를 정의할때 정규표현식이 가능한데
<Directory ~ "/home/[a-zA-Z0-9]...">
와 같이 정규표현식을 사용하겠다라고
"~" 문자를 앞에 적어주면
됩니다.
이때 틸트(~)는 사용자 계정이 아님에 주의.
마지막으로
옵션 나열시
+나 -를 사용할 수 있는데
이는 상위의 옵션을 그대로 이어와서
현재의 디렉토리를 기준으로 상위의 디렉토리에서 ExecCGI
옵션이
이미 들어가 있고 해당 디렉토리에서는
이 옵션을 빼려면
-ExecCGI
라고 설정하면 됩니다. 반대로
상위의 디렉토리에서 이 옵션이 없고 해당 디렉토리에서는
이 옵션을 추가하고 싶다면
+ExecCGI
라고 합니다.
이때도 주의할 점이 있는데
/home
ExecCGI
/home/ID/public_html
ExecCGI
와 같이 두번 걸치게 되면
상위의 /home은 ExecCGI가 적용되지않는다고
나오군요.
(모 책에서....나중에
직접테스트해 봐야겠군요...)
*PS :
너무 길게 설명해서 헷갈리수도 이겠군요....T.T
|