문제

내 라이브 사이트에 htpasswd 인증을 설정했는데 훌륭하게 작동하지만 개발 환경에서 작업할 때 비밀번호를 묻는 것을 원하지 않습니다.

내 httpd.conf 파일에는 다음이 있습니다.

SetEnv APP_ENV "development"

.htaccess 내가 가지고 있는 파일:

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

htppasswd 항목 주위에 조건문을 두는 방법이 있는지 궁금합니다. APP_ENV ~이다 development 비밀번호를 묻는 메시지가 표시되지 않습니다.

이것이 가능한가?

도움이 되었습니까?

해결책

할 수있는 경우, Apache 2.4 (또는 최신 2.3)로 업그레이드하는 것에 대해 생각해야합니다.베타 빌드 2.4 이후 아직 릴리스되지 않았습니다.)

사용할 수있는 새로운 기능 중 하나는 권한있는 컨테이너 - 훨씬 간단하게 만드는 것입니다. 요구 사항 지시문을 사용하여 액세스 요구 사항을 정의하십시오.

다음과 같이 종료해야합니다 :

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

다른 팁

env 변수가있는 조건부 블록이 mod_macro 모듈을 사용하는 경우 빌드 방식 중 하나입니다. 이전에 이전에 예제를 만들었습니다 여기 .

이 특별한 경우가 VirtualHost 파일 앞에있는 경우 (VirtualHost 정의 이전)

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

및 VirtualHost 내부 :

Use ConditionalBlockMacroSecurity_${APP_ENV}
.

HTPassword 파일의 경로를 매크로의 매개 변수로 설정할 수도 있습니다.

이 솔루션의 단점은 프로덕션 서버에 mod_macro를 설치해야한다는 것입니다. 일반적으로 설치된 모듈이 아니므로 프로덕션 Env의 일부 제어가 필요합니다. 반대편에서 간단한 해결책은 환경에 따라 여러 버전의 VirtualHosts를 사용하고 AUTH 섹션에 몇 가지 주석을 추가하는 것입니다. 그러나 일반적인 솔루션을 검색하는 경우 재발원적인 문제라는 것을 의미하며,이 경우 MOD_MACRO는 Apache 구성이 단일 매크로가 될 때까지 Apache 경험을 대문자로 대문자로 대문자로 활용할 수있는 매우 전문적인 방법이 될 수 있습니다. 매개 변수를 사용하여 많은 다른 매크로를 호출합니다.

Apache Config의 조건은 구성이 [RE]로드 된 경우에만 한 번만 작동합니다.

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

다음을 추가하세요.

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

이를 위해서는 다음이 필요합니다. Require valid-user 또는 Allow from <dev IP> 적용됩니다.

.htaccess 파일에서 다음과 같은 ifdefine 지시문 내의 블록을 중첩 할 수 있습니다.

<IfDefine PROD>
  bla bla bla
</IfDefine>
.

Apache를 시작할 때 -D PROD를 인수로 전달해야합니다.이 섹션은 prod가 정의 된 경우에만 실행됩니다.Ubuntu에서는 예를 들어 /etc/apache2/envvars를 편집하고 끝에이 행을 추가 할 수 있습니다.

export APACHE_ARGUMENTS="-D PROD"
.

개발 환경이 아닌 경우에만 <IfDefine !DEV>와 같이 실행 한 다음 해당 환경에서 -d dev를 통과 한 다음 envvars를 편집하지 않고도 프로덕션 사이트를 남겨 둘 수 있습니다.

사용자의 필요에 맞게 이에 따라 수정하십시오!

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