Apache Proxy: nenhum manipulador de protocolo era válido


191

Estou tentando proxy de um subdiretório para outro servidor. Meu httpd.conf:

RewriteEngine On
ProxyPreserveHost On
RewriteRule .*subdir/ https://anotherserver/subdir/ [P]

O problema é que o Apache está sempre registrando isso:

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

Então, depois de pesquisar na internet, ativei estes módulos:

LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule rewrite_module modules/mod_rewrite.so

(Eu sei que não preciso de todos eles, mas apenas os ativei para ter certeza de que não estou perdendo um)

Mas esse erro ainda aparece e os clientes recebem um HTTP 500.

Como posso consertar isso?


parece que é necessário algum manipulador HTTPS para a solicitação de proxy. Tente HTTP em vez ...
Deadooshka

9
Acho que você precisa mod_ssle SSLProxyEnginecomProxyPass
Deadooshka

@Deadooshka Sim, isso está funcionando. Se você postar isso como uma resposta, eu aceito
das_j

Respostas:


419

Isso pode acontecer se você não tiver mod_proxy_httpativado

sudo a2enmod proxy_http

Para que meu balanceador de carga baseado em https funcione, tive que ativar o seguinte:

sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http

23
Eu também tive que fazer um 'sudo a2enmod proxy_wstunnel', para o meu caso de uso.
21715 JimJty

8
Para mim foi LoadModule ssl_module modules/mod_ssl.so. Eu também tive que usar SSLProxyEngine on.
Chloe

1
Eu também tive a permitirmod_slotmem_shm
SiggyF

2
Para mim em WAMP, eu instalei os módulos acima através do menu e teve que uncomment LoadModule slotmem_shm_module modules/mod_slotmem_shm.soem httpd.conf
Flion

1
Eu precisava sudo a2enmod proxy_connect, que é encapsular https usando CONNECT
Raul Nohea Goodness

22

Para minha instalação do Apache2.4 + php5-fpm começar a funcionar, eu precisava ativar os seguintes módulos do Apache:

sudo a2enmod proxy
sudo a2enmod proxy_fcgi

Não é necessário proxy_http, e é isso que envia todos os .phparquivos diretamente para o php5-fpm:

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost"
</FilesMatch>

Sim, para fcgi isso é verdade, mas eu tinha um proxy HTTP. :)
das_j

10

No meu caso, eu precisava do proxy_ajpmódulo.

a2enmod proxy proxy_http proxy_ajp 

8

Isso estava acontecendo para mim na minha instalação do Apache / 2.4.18 (Ubuntu). No meu caso, o erro que eu estava vendo foi:

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

A configuração relacionada a isso foi:

  ProxyPass /~socket.io/ ws://127.0.0.1:8090/~socket.io/
  ProxyPassReverse /~socket.io/ ws://127.0.0.1:8090/~socket.io/

" No protocol handler was valid for the URL /~socket.io/" significava que o Apache não podia lidar com a solicitação enviada para " ws://127.0.0.1:8090/~socket.io/"

Eu tinha proxy_httpcarregado, mas também precisava proxy_wstunnel. Uma vez habilitado, tudo estava bem.


6

Para esclarecer para referência futura, o a2enmod, conforme sugerido em várias respostas acima, é para o Debian / Ubuntu. A Red Hat não usa isso para ativar os módulos Apache - em vez disso, usa instruções LoadModule no httpd.conf.

Mais aqui: /server/56394/how-do-i-enable-apache-modules-from-the-command-line-in-redhat

A resolução / resposta correta está nos comentários do OP:

Eu acho que você precisa de mod_ssl e SSLProxyEngine com ProxyPass #: 23414 Deadooshka

@Deadooshka Sim, isso está funcionando. Se você postar isso como uma resposta, eu aceito - das_j 29 / mai '14 às 12:04


4

Estou postando uma resposta aqui, pois tive a mesma mensagem de erro por um motivo diferente.

Essa mensagem de erro pode ocorrer, por exemplo, se você estiver usando o apache httpd para proxy de solicitações de uma origem no protocolo A para direcionar no protocolo B.

Aqui está o exemplo da minha situação:

AH01144: Nenhum manipulador de protocolo foi válido para o URL / sockjs-node / info (esquema 'ws').

No caso acima, o que estava acontecendo era simplesmente o seguinte. Eu havia ativado o proxy mod para solicitações de proxy websocket para nodejs com base no caminho / sockjs-node.

O problema é que o nó não usa o caminho / sockjs-node exclusivamente para solicitações de websocket. Ele também usa esse caminho para hospedar pontos de entrada REST que fornecem informações sobre websockets.

Dessa maneira, quando o aplicativo tentaria abrir http: // localhost: 7001 / sockjs-node / info , o apache httpd tentaria rotear a chamada restante do protocolo HTTP para uma chamada de terminal Webscoket. O nó não aceitou isso.

Isso levou à exceção acima.

Lembre-se de que, mesmo que você ative os módulos corretos, se tentar fazer o encaminhamento errado, isso terminará com o apache httpd informando que o protocolo que você tentou usar no servidor de destino não é válido.


Provavelmente era proxy_wstunnel. Veja o primeiro comentário sobre a resposta aceita.
Lerk


0

Para mim, todas as respostas acima mencionadas foram ativadas no xampp ainda não funcionando. A ativação do módulo abaixo fez o host virtual funcionar novamente

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.