NameVirtualHosts를 사용하고 www로 리디렉션 할 때 ELB 상태 확인을 구성하려면 어떻게해야합니까? DNS 와일드 카드를 가지고 있으며 모든 것을

HTTP 상태 확인이 실패하여 ELB에서 인스턴스를 계속 사용 중지합니다.

우리는 DNS 와일드 카드를 가지고 있으며 모든 것을 www로 리디렉션합니다 :

vhost.conf :

ServerName www.example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ http://www.example.com/$1 [R=301,L]

이것은 실제 브라우저에서는 잘 작동하지만 HTTP 상태 확인은 실패하고 아마도 302가 발생하기 때문에 실패합니다.

TCP 상태 확인을 사용하는 가장 좋은 옵션입니까, 아니면 HTTP를 작동시키는 방법이 있습니까?



답변

이 질문은 AWS 포럼 에서 요청되었으며 베어 IP 주소의 트래픽을 처리하고 리디렉션을 수행하지 않는 기본 가상 호스트를 설정하는 것이 답이었습니다. 이는 귀하의 IP 주소를 공격 한 일반 사용자도 리디렉션되지 않음을 의미합니다.

또는 다른 RewriteCond를 추가하여 ELB가 요청할 경로의 URL 부분을 지정하고 해당 경로를 무시할 수도 있습니다.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/health-check$
RewriteRule ^ http://www.example.com/$1 [R=301,L]

해당 URL을 방문한 일반 사용자는 리디렉션되지 않습니다.

동일한 기술을 사용하여 ELB의 User-Agent를 감지 할 수도 있습니다.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^ http://www.example.com/$1 [R=301,L]

User-Agent를 스푸핑 한 일반 사용자는 리디렉션되지 않습니다.

또는 ELB의 내부 IP 주소.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REMOTE_ADDR} !^10\.
RewriteRule ^ http://www.example.com/$1 [R=301,L]

이 옵션이 작동하려면 mod_rpaf(Apache 2.2의 경우) 또는 mod_remoteip(Apache 2.4 REMOTE_ADDR의 경우) X-Forwarded-For헤더 내용의 올바른 부분을 포함하도록 변수를 수정해야 합니다 . 이를 올바르게 설정하면 일반 사용자가 리디렉션 응답을 피할 수 없습니다.


답변

가상 호스트를 추가하는 것은 좋은 생각이 아닙니다. 가상 호스트를 반영하려면 httpd 서비스를 다시 시작해야하기 때문입니다. 이 작업을 수행하는 다른 방법이 있습니다

  1. .htaccess 파일에서 ELB Health Check 경로를 무시하고
    다음
    elb_dns_name 과 같이 dns 이름의 네 부분을 모두 분리하십시오 . elb-name.subnet_zone.elb.amazonaws.com
  2. 나머지 모든 URL에는 내부 재 작성 규칙
    directory_scructure가 있습니다 : code_folder / website

    RewriteEngine On
    RewriteCond % {HTTP_HOST}! $ [NC]
    RewriteCond % {REQUEST_URI}! ^ / index.php $
    RewriteRule ^ (. *) $ / $ 1 [L, QSA]

이것은 나를 위해 아주 잘 작동했습니다. 더 나은 응원 방법이 있다면 제안하십시오!