AWS ELB 400 BAD_REQUEST com espaço no final de um URI

1

Estamos usando o AWS ELB para balanceamento de carga HTTP / S e encontramos um problema muito louco com o ELB.

$ curl -i "http://yourdomain.com/ "
HTTP/1.1 400 BAD_REQUEST
Content-Length: 0
Connection: Close

Parece que o AWS ELB está fazendo um pouco de split(' ', $first_line)[2] procurando a versão HTTP / 1.x. É compreensível que essa solicitação não seja tecnicamente correta. Deve haver um único espaço entre o URI e a versão HTTP / 1.x. Mas realmente? Ao contrário de todos os outros daemon HTTP na Internet, essa simples solicitação falha com o AWS ELB.

Isso é realmente verdade? Alguém pode replicar esse problema?

    
por nate 11.03.2015 / 18:35

1 resposta

2

Isso é um pouco antigo, mas espero que a resposta possa ajudar outras pessoas. Eu estou enfrentando o mesmo problema com alguns dispositivos incorporados fazendo solicitações GET para alguns servidores da web por trás e proxy ELB (não posso alterar o código fazendo as solicitações HTTP).

O proxy ELB está lidando com isso corretamente (e você está recebendo a resposta correta: 400 Solicitação incorreta). Os espaços devem ser codificados por URL. Alguns servidores da web e proxies são tolerantes a esses espaços (Apache e Squid, pelo menos versões recentes, são exemplos), mas qualquer que seja o software em execução no AWS ELB não é.

Minha solução alternativa era configurar o balanceador de carga para fazer a passagem TCP para a porta 80 (escutar a porta 80, enviar para a porta 80 da instância) para que a solicitação fosse processada diretamente pelo servidor Apache nas instâncias do EC2 atrás do balanceador de carga. (Não há aderência de instância com essa configuração, mas para o meu aplicativo que não é necessário). Como mencionado, o Apache parece estar Ok com esse espaço extra no final da URL.

    
por 01.11.2015 / 03:43