“Nenhum manipulador de protocolo válido para o URL” com httpd mod_proxy_balancer

5

Estou tentando configurar o failover para um servidor com proxy reverso com uma cópia estática de recursos localhost que normalmente seria atendida por um sistema de gerenciamento de conteúdo. Eu usei wget para pegar uma cópia estática do site dinâmico para fins de failover.

Eu tentei usar uma configuração semelhante a local de fall-back para Diretiva ProxyPass do Apache? para iniciar as coisas, e é bastante simples, mas estou recebendo o erro no título.

Aqui está minha configuração de proxy (higienizada):

DocumentRoot /var/www/www.example.com/htdocs

ProxyRequests Off
ProxyPreserveHost On

ProxyPass "/site/" "balancer://cms"
ProxyPassReverse "/site/" "balancer://cms"
ProxyPassReverse "/site/" "http://ip-10-1-1-229.ec2.internal/site/"

<Proxy "balancer://cms">
    #BalancerMember "http://ip-10-1-1-229.ec2.internal/site/" loadfactor=1
    # For localhost services, a backup of the CMS's site
    BalancerMember "http://127.0.0.1/site-backup/www.example.com/site/" loadfactor=10 status=+H
</Proxy>

<Directory "/var/www/www.example.com/htdocs/site-backup">
  Order allow,deny
  Allow from all

  Options Indexes FollowSymlinks
  DirectoryIndex index.html
</Directory>

(Aqui, eu comentei o membro do balanceador que vai para o sistema CMS real - essa parte está funcionando muito bem - para que eu possa testar a cópia estática local.)

Há um arquivo index.html em /var/www/www.example.com/site-backup/www.example.com/ e ele é carregado quando tento atingir http://www.example.com/site/ , mas nenhum dos outros recursos da página (CSS, imagens, etc.) é carregado. Eles têm URLs na página como:

Eu tenho um arquivo, foo.png neste local:

/var/www/www.example.com/htdocs/site-backup/www.example.com/site/sites/default/files/foo.png

Mas quando essa imagem é carregada pelo navegador, recebo uma resposta 500 Internal Server Error e vejo isso no log de erros do httpd:

[proxy:warn] [pid 3182:tid 2838395712] [client 71.127.40.115:38208] AH01144: No protocol handler was valid for the URL /site/site/sites/default/files/foo.png. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule., referer: http://test.example.com/site/

Percebi que o URL mostrado na mensagem de erro tem um /site/ extra no URL, por isso percebi que ele estava sendo duplicado porque estou tentando exibir um espaço de URL incluindo /site/ de um diretório contendo /site/ e wget provavelmente não estão perfeitos agora, então criei um link simbólico de /var/www/www.example.com/site-backups/www.example.com/site/site/sites -> /var/www.www.example.com/site-backups/www.example.com/site/sites . Isso deveria ter corrigido qualquer tolice devido à confusão de URLs.

Mas isso não parece consertar nada; mod_proxy ainda está reclamando sobre o protocolo. mod_proxy_http está definitivamente ativado, já que a diretiva normal ProxyPass para o CMS está funcionando como esperado (quando ativado).

Tenho certeza de que esta é uma coisa bastante simples que estou perdendo, mas não consigo entender. Qualquer ajuda seria muito apreciada.

    
por Christopher Schultz 28.04.2016 / 03:13

3 respostas

11

facepalm

Acontece que faltava uma barra na minha diretiva ProxyPass :

ProxyPass "/site/" "balancer://cms"

deveria ter sido:

ProxyPass "/site/" "balancer://cms/"

(Observe a barra final antes da citação de fechamento).

Isso literalmente consertou tudo.

Fico feliz em excluir esta pergunta e responder se as pessoas quiserem encerrá-la como "erro tipográfico simples", mas deixarei isso por enquanto. Se eu obtiver alguns up votos nesta resposta, removerei esta nota e considerarei um serviço público para qualquer pessoa que possa cometer o mesmo erro.

    
por 28.04.2016 / 04:08
1

No meu caso, eu precisava de proxy_ajp module.

a2enmod proxy proxy_http proxy_ajp 
    
por 28.11.2016 / 03:29
0

O mesmo que kujiy eu tive que adicionar o mod_ajp .

Estou usando o apache4.

Meu log mostrou mensagens da seguinte forma:

No protocol handler was valid for the URL /jira. 
If you are using a DSO version of mod_proxy, 
make sure the proxy submodules are included in 
the configuration using LoadModule 

então eu adicionei (quero dizer, descomentado) a seguinte linha ao meu httpd.conf:

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 

salvo e o servidor apache reiniciado.

    
por 18.01.2017 / 17:40