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 서비스를 다시 시작해야하기 때문입니다. 이 작업을 수행하는 다른 방법이 있습니다
- .htaccess 파일에서 ELB Health Check 경로를 무시하고
다음
elb_dns_name 과 같이 dns 이름의 네 부분을 모두 분리하십시오 . elb-name.subnet_zone.elb.amazonaws.com -
나머지 모든 URL에는 내부 재 작성 규칙
directory_scructure가 있습니다 : code_folder / websiteRewriteEngine On
RewriteCond % {HTTP_HOST}! $ [NC]
RewriteCond % {REQUEST_URI}! ^ / index.php $
RewriteRule ^ (. *) $ / $ 1 [L, QSA]
이것은 나를 위해 아주 잘 작동했습니다. 더 나은 응원 방법이 있다면 제안하십시오!