2010-07-26 3 views
7

라이브 사이트에서 htpasswd 인증을 설정했는데 잘 작동하지만 개발 환경에서 작업 할 때 비밀번호를 묻지 않습니다. 내 httpd.conf 파일에서htaccess 조건

내가 가진 :

.htaccess 파일에서
SetEnv APP_ENV "development" 

내가 가진 : 어쨌든 htppasswd 물건 주위에 조건부 퍼팅이 있다면 궁금 해서요

AuthName "Restricted Area" 
AuthType Basic 
AuthUserFile /path/to/file/.htpasswd 
AuthGroupFile /dev/null 
require valid-user 

그래서 APP_ENVdevelopment 일 때 암호를 묻는 메시지가 표시되지 않습니다.

이게 가능합니까?

답변

6

가능한 경우 Apache 2.4 (또는 2.4가 아직 발표되지 않아 최신 2.3 베타 빌드)로 업그레이드해야한다고 생각해야합니다.

사용할 수있는 새로운 기능 중 하나는 Authorization Containers입니다. Require 지시문을 사용하여 액세스 요구 사항을 훨씬 쉽게 정의 할 수 있습니다.

<IfDefine PROD> 
    bla bla bla 
</IfDefine> 

다음 확인 인수로 -D PROD을 통과 : 당신이 둥지처럼 IfDefine 지시어 내에서 블록, 할 수 .htaccess 파일에서

AuthName "Restricted Area" 
AuthType Basic 
AuthUserFile /path/to/file/.htpasswd 
AuthGroupFile /path/to/file/groups 

SetEnv APP_ENV "development" 

<RequireAll> 
    <RequireAny> 
    <RequireAll> 
     #main requirements 
     Require group user 
     #other conditions if needed for non-dev/non-local 
    </RequireAll> 

    <RequireAll> 
     #allow direct if development 
     Require env APP_ENV development 
    </RequireAll> 

    <RequireAll> 
     <RequireAny> 
     #allow loopback and local network 
     Require ip 127.0.0.1 
     Require ip 10.2 
     </RequireAny> 
    </RequireAll> 
    <RequireAny> 

    #other conditions if needed for everyone 

    <RequireNone> 
    #blacklist 
    </RequireNone> 
</RequireAll> 
2

Apache 구성의 조건은 구성이 [다시]로드 될 때 한 번만 작동합니다.

내가 할 수있는 것은 동일한 루트 디렉토리로 두 번째 VirtualHost를 만들고 거기에 IP 주소를 기반으로 거부/허용을 사용하여 액세스를 제어하는 ​​것입니다.

2

는 다음을 추가 :이 Require valid-user또는Allow from <dev IP> 적용해야합니다

Require valid-user 
Allow from <dev IP> 
Satisfy Any 

.

+0

그럴 수는 있지만 다른 제약 때문에'만족 '을 사용해야합니다. – gpojd

+0

@ gpojd 전체 설정을 게시 할 수 있습니까? – zrvan

+0

불행히도 게시 할 수 없습니다. 내 .htaccess는 OP와 비슷하지만 IP 주소로 제한하고'모두 만족 '합니다. – gpojd

3

env 변수가있는 조건부 블록을 작성하는 방법 중 하나는 mod_macro 모듈을 사용하는 것입니다. 이전에 예를 만들었습니다 here. 가상 호스트

<Macro ConditionalBlockMacroSecurity_production> 
    AuthName "Restricted Area" 
    AuthType Basic 
    AuthUserFile /path/to/file/.htpasswd 
    AuthGroupFile /dev/null 
    require valid-user 
</Macro> 
<Macro ConditionalBlockMacroSecurity_development > 
    <IfModule mod_headers.c> 
     Header set MyHeader "Hello this is DEVELOPMENT envirronment. It took %D microseconds for Apache to serve this request." 
    </IfModule> 
</Macro> 

을 그리고 내부 :

Use ConditionalBlockMacroSecurity_${APP_ENV} 

곳 htpassword 파일의 경로 수는 (VirtualHost의 정의 전) 가상 호스트 파일의 상단에있는 것이 특별한 경우

또한 매크로의 매개 변수로 설정할 수 있습니다.

이 솔루션의 단점은 프로덕션 서버에 mod_macro를 설치해야한다는 것이며, 일반적으로 설치된 모듈이 아니므로이를 수행하기 위해 프로덕션 환경을 일부 제어해야합니다. 다른면에서 간단한 해결책은 환경에 따라 여러 버전의 가상 호스트를 만들고 인증 섹션에 몇 가지 설명을 추가하는 것입니다. 그러나 일반적인 솔루션을 찾고 있다면 재발 문제이므로 파일을 수동으로 편집하지 않아도됩니다. 이러한 경우 mod_macro는 아파치 설정이 단일 매크로가 될 때까지 아파치 경험을 대문자로 만드는 매우 전문적인 방법이 될 수 있습니다 매개 변수를 사용하여 많은 다른 매크로를 호출합니다.

0

:

당신은 같은 결과가 발생해야한다 아파치를 시작할 때. 이 섹션은 PROD가 정의 된 경우에만 실행됩니다. 우분투에서 당신이 할 수있는이, 예를 들어, /etc/apache2/envvars을 편집하고 마지막에이 줄을 추가 : 때이 아니 개발 환경 당신은 "역"그것은 아마도에 <IfDefine !DEV> 같은 것을 사용하여에만 실행할 수 있습니다

export APACHE_ARGUMENTS="-D PROD" 

, 그 환경에서 -D DEV를 전달하고 envvars를 편집 할 필요없이 프로덕션 사이트를 그대로 둡니다.

필요에 맞게 수정하십시오!