Como devo configurar minha verificação de integridade do ELB ao usar NameVirtualHosts e redirecionar para www?

8

Meu ELB mantém minhas instâncias fora de serviço, porque a verificação de integridade de HTTP está falhando.

Temos um caractere curinga de DNS e redirecionamos tudo para 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]

Isso funciona bem para navegadores reais, mas a verificação de integridade de HTTP para / falha, presumivelmente porque está recebendo um 302.

A melhor opção é usar uma verificação de integridade TCP ou existe uma maneira de fazer o HTTP funcionar?

    
por chris 17.01.2013 / 15:06

2 respostas

11

Esta questão foi colocada nos fóruns da AWS e a resposta foi criar um vhost padrão que manipula o tráfego no endereço IP simples e não faz nenhum redirecionamento. Isso significa que os usuários normais que acessaram seu endereço IP também não serão redirecionados.

Você pode, alternativamente, especificar a parte do caminho da URL que deseja que o ELB solicite e ignorar esse caminho adicionando outro RewriteCond:

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

Usuários normais que acessam essa URL não serão redirecionados.

Você também pode usar a mesma técnica para detectar o User-Agent do ELB.

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

Usuários normais que falsificam seu User-Agent não serão redirecionados.

Ou o endereço IP interno do ELB.

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

Para esta opção funcionar, será necessário mod_rpaf (para o Apache 2.2) ou mod_remoteip (para o Apache 2.4) para modificar a variável REMOTE_ADDR para conter a parte correta do conteúdo da X-Forwarded-For cabeçalho. Contanto que você configure corretamente, não deve ser possível para um usuário normal evitar a resposta de redirecionamento.

    
por 17.01.2013 / 16:02
0

Adicionar hosts virtuais não é uma boa ideia, já que é necessário reiniciar o serviço httpd para hosts virtuais para serem refletidos. Existe uma maneira alternativa de fazer isso

  1. Ignorar o caminho da Verificação de integridade do ELB no arquivo .htaccess
    separar todas as quatro partes do nome dns como segue
    elb_dns_name: elb-name.subnet_zone.elb.amazonaws.com
  2. Para todos os URLs restantes, tenha regras de reescrita interna | directory_scructure: code_folder / website

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

Isso funcionou muito bem para mim. Por favor, sugira se existem métodos melhores felicidades!

    
por 21.05.2014 / 17:23