AEM Dispatcher에서 해결되거나 적용되지 않는 Dispatcher 환경 변수 해결
Dispatcher 환경 변수가 범위를 잘못 지정했거나, 이름이 잘못되었거나, 잘못된 서비스에 할당되었거나, 지원되지 않는 지시문에서 참조되었거나, 잘못된 Dispatcher 구성으로 인해 재정의된 경우 IfDefine개 블록 내에서 확인할 수 없거나, 환경 간에 일관되지 않게 동작합니다. AEMaaCS에서는 ENVIRONMENT_DEV, ENVIRONMENT_STAGE 및 ENVIRONMENT_PROD만 Apache 정의로 삽입되지만, 사용자 지정 Cloud Manager 변수는 문자열 대체용으로만 작동하므로 IfDefine 내에서 사용할 수 없습니다. AMS에서는 변수를 /etc/sysconfig/httpd에서 정의해야 합니다. 변수 정의의 유효성을 검사하고, 지원되는 컨텍스트에서 변수 정의가 사용되는지 확인하고, 런타임 시 올바른 vhost 로드를 확인하면 예상 값이 복원됩니다.
설명 description
환경:
- Adobe Experience Manager as a Cloud Service (AEMaaCS)
- AEM Managed Services (AMS)
- 게시 계층의 AEM Dispatcher(Apache)
- 로컬 유효성 검사를 위한 Dispatcher SDK
문제/증상:
- 사용자 지정 헤더는 확인된 값 대신 리터럴 변수 이름을 출력합니다(예: Access-Control-Allow-Origin: ${VAR_NAME}).
- Dispatcher 유효성 검사기 보고서 AH00111: 구성 변수 ${VAR_NAME}이(가) 정의되지 않았습니다.
- Apache가 가상 호스트에서 사용된 빈 변수에 대해 잘못된 권한을(를) 보고합니다.
ENVIRONMENT_STAGE또는ENVIRONMENT_DEV이(가) 검색되지 않아IfDefine개 블록이 적용되지 않습니다.- Dispatcher 유효성 검사 또는 배포 중에 파이프라인이 실패하거나 명확한 오류 없이 배포되고 로컬 유효성 검사기에 정의되지 않은 변수가 표시됩니다.
- RDE에 정의된
ENVIRONMENT_RDE이(가) 없으므로 환경별 규칙이 실행되지 않습니다.
근본 원인:
Dispatcher 변수 해상도는 플랫폼 및 지시문 유형에 따라 다릅니다. AEMaaCS에서 ENVIRONMENT_DEV, ENVIRONMENT_STAGE 및 ENVIRONMENT_PROD만 Apache 정의입니다. Cloud Manager 변수는 문자열 대체로만 사용할 수 있으며 IfDefine에서는 사용할 수 없습니다. 지원되지 않는 지시문(IfDefine, <If> 또는 빈 ServerName) 내의 변수를 사용하거나 파이프라인과 런타임 모두에 대해 변수를 정의하지 않으면 정의되지 않은 값이 생성됩니다. vhost symlink 또는 팜 가상 호스트 매핑이 올바르지 않으면 잘못된 vhost 파일이 로드되고 변수가 작동하지 않는 것처럼 보입니다. vhost ServerName 또는 ServerAlias의 빈 문자열로 인해 Apache 런타임 오류가 발생합니다. AMS에는 /etc/sysconfig/httpd에 정의된 변수가 필요하며 환경 간에 값이 일치하지 않으면 잘못된 동작이 발생합니다.
확인하는 방법
- 변수가 존재하고 올바르게 정의되어 있는지 확인합니다. Cloud Manager에서 프로그램
>환경>환경 변수(으)로 이동하여 변수 이름(대/소문자 구분) 및 값이 Dispatcher 구성이 참조하는 것과 정확히 일치하는지 확인하십시오. Dispatcher가 작성자 계층에 없으므로 변수가 Publish 서비스에 대해 정의되었는지 확인합니다. - 변수 유형이 사용되는 컨텍스트에서 지원되는지 확인합니다. AEMaaCS는
IfDefine내에서 Cloud Manager 환경 변수를 지원하지 않습니다.ENVIRONMENT_DEV,ENVIRONMENT_STAGE및ENVIRONMENT_PROD만 여기서 작동합니다. Cloud Manager 변수를 래핑하는IfDefine이(가) 표시되면 해당 사용은 지원되지 않습니다. - 특히 vhost에서 빈 문자열로 확인되는 변수가 없는지 확인합니다.
ServerName의 빈 FQDN 변수는 Apache 잘못된 권한 오류를 생성합니다.
해결 방법 resolution
- 변수 정의 또는 서비스 할당을 수정합니다. 이름 또는 값이 잘못되었거나 잘못된 서비스에 할당된 경우 Cloud Manager에서 환경 변수를 추가하거나 수정하고 파이프라인을 다시 실행하십시오.
- 지원되는 컨텍스트에서만 변수를 사용하십시오. Cloud Manager 변수를 문자열 대체, 헤더, 다시 작성 규칙 및 vhost 구성에 유지합니다. 환경별 논리의 경우
IfDefine에서 사용자 지정 변수를 래핑하는 대신<If "${ENV:ENVIRONMENT_TYPE} == 'dev'">또는ENVIRONMENT_DEV정의와 같은 Apache 식을 사용하십시오. custom.vars에서 참조된 변수를 정의하십시오. vhost 파일에서 참조되는 모든 변수에 대해Define VAR_NAME ${varname}형식으로Define항목을 추가하십시오. 정의를 적절히 사용하면 유효성 검사기가 보고를 중지합니다. AH00111: 구성 변수가 정의되지 않았습니다.- vhost 및 farm 심볼릭 링크가 유효한지 확인합니다. 로컬에서 Dispatcher 유효성 검사기를 실행하십시오.
enabled_vhosts또는enabled_farms에 symlink 대신 일반 파일이 포함되어 있으면 오류가 나타납니다. 유효성 검사기에 오류가 표시되지 않을 때까지src/conf.d/enabled_vhosts및enabled_farms에서ln -s과(와)의 심볼릭 링크를 다시 만드십시오. - 런타임 시 올바른 vhost가 로드되는지 확인하십시오. 팜 파일이 올바른
virtualhosts.any파일을 가리키는지 확인합니다. 잘못된/virtualhosts매핑으로 인해 Dispatcher가 기본 vhost를 로드하고 사용자 지정 변수를 무시합니다.../virtualhosts/virtualhosts.any을(를) 포함하도록 팜/virtualhosts블록을 수정한 다음 페이지를 방문하여 사용자 지정 헤더에 확인된 값이 표시되는지 확인하십시오. - AMS의 경우에만
/etc/sysconfig/httpd에 변수를 설정하십시오. SSH를 Dispatcher 서버에 넣고cat /etc/sysconfig/httpd을(를) 실행하여 변수가 올바른 환경을 반영하는지 확인한 다음sudo systemctl restart httpd을(를) 사용하여 Apache를 다시 시작합니다. 값이 반환되면 AMS 지원 센터에 문의하십시오. - Dispatcher SDK을 사용하여 로컬에서 테스트합니다. AEM SDK Dispatcher 도구를 사용하여 로컬로 Dispatcher를 실행한 다음
curl -I http://localhost:8080/...을(를) 사용하여 헤더 확인을 확인합니다.
유효성 검사
dispatcher-sdk/bin/validate src을(를) 실행하고 정의되지 않은 변수 오류(AH00111)가 나타나지 않는지 확인하십시오.curl -I또는 브라우저 DevTools를 사용하여 실제 HTTP 응답 헤더를 확인하고 변수가 해당 Cloud Manager 값으로 확인되는지 확인합니다.