Proxy inverse Apache: pas de gestionnaire de protocole

20

J'essaie de configurer un proxy inverse avec apache, mais j'obtiens une No protocol handler was valid for the URLerreur, que je ne comprends pas.

C'est la configuration appropriée d'apache:

ProxyRequests Off
ProxyPreserveHost On

<Proxy *>
       Order deny,allow
       Allow from all
</Proxy>

ProxyPass        /gonvaled/examples/jsonrpc/output/services/ http://localhost:8000/services/
ProxyPassReverse /gonvaled/examples/jsonrpc/output/services/ http://localhost:8000/services/

Les demandes atteignent apache comme:

POST /gonvaled/examples/jsonrpc/output/services/EchoService.py HTTP/1.1

Et ils doivent être transmis à mon service interne, situé à:

0.0.0.0:8000/services/EchoService.py

Ce sont les journaux:

==> /var/log/apache2/error.log <==
[Wed Jun 20 02:05:20 2012] [debug] proxy_util.c(1506): [client 127.0.0.1] proxy: http: found worker http://localhost:8000/services/ for http://localhost:8000/services/EchoService.py, referer: http://localhost/gonvaled/examples/jsonrpc/output/JSONRPCExample.safari.cache.html
[Wed Jun 20 02:05:20 2012] [debug] mod_proxy.c(998): Running scheme http handler (attempt 0)
[Wed Jun 20 02:05:20 2012] [warn] proxy: No protocol handler was valid for the URL /gonvaled/examples/jsonrpc/output/services/EchoService.py. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
[Wed Jun 20 02:05:20 2012] [debug] mod_deflate.c(615): [client 127.0.0.1] Zlib: Compressed 614 to 373 : URL /gonvaled/examples/jsonrpc/output/services/EchoService.py, referer: http://localhost/gonvaled/examples/jsonrpc/output/JSONRPCExample.safari.cache.html

==> /var/log/apache2/access.log <==
127.0.0.1 - - [20/Jun/2012:02:05:20 +0200] "POST /gonvaled/examples/jsonrpc/output/services/EchoService.py HTTP/1.1" 500 598 "http://localhost/gonvaled/examples/jsonrpc/output/JSONRPCExample.safari.cache.html" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19"
dangonfast
la source

Réponses:

26

J'ai trouvé le problème. Le proxy_httpmodule doit également être activé dans Apache (j'avais seulement proxy_htmlet proxy)

dangonfast
la source
23

Pour moi, sur apache httpd 2.4, cela s'est produit parce que la barre oblique de fin me manquait:

N'a pas fonctionné:

    <Proxy balancer://mycluster>
        BalancerMember http://192.168.111.7
        BalancerMember http://192.168.111.80
    </Proxy>
    ProxyPass / balancer://mycluster
    ProxyPassReverse / balancer://mycluster

Travaillé!

    <Proxy balancer://mycluster>
        BalancerMember http://192.168.111.7
        BalancerMember http://192.168.111.80
    </Proxy>
    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/

(ajouté /à la fin)

Nicholas DiPiazza
la source
Pour moi, apache 2.2.15, <kbd> / </kbd> à la fin fonctionne. THX!
m'a aidé sur Apache / 2.4.10 (Debian). Cela doit être documenté! Le message d'erreur est extrêmement obtus
DeveloperChris
2

Pour ceux qui viennent chercher des réponses, une autre possibilité est que le nom du service URL à backend soit également manquant. Avec LogLevel Debug, et mod_proxy et mod_proxy_fcgi, je voyais ce qui suit:

[debug] proxy: fgci: found worker fgci://127.0.0.1:9000/var/www/html/.../index.php [debug] mod_proxy.c(1026): Running scheme fgci handler (attempt 0) [debug] mod_proxy_fcgi.c(800): [client ...] AH01076: url: fgci://127.0.0.1:9000/var/www/html/.../index.php proxyname: (null) proxyport: 0 [debug] mod_proxy_fcgi.c(805): [client ...] AH01077: declining URL fgci://127.0.0.1:9000/var/www/html/.../index.php [warn] proxy: No protocol handler was valid for the URL /.../index.php. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

Heureusement, le code de mod_proxy_fastcgi (j'utilise un backport pour Apache 2.2 sur RHEL6) est disponible sur https://github.com/ceph/mod-proxy-fcgi/blob/master/mod_proxy_fcgi.c#L805 , qui est ceci morceau de code:

if (strncasecmp(url, "fcgi:", 5) != 0) {
    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01077) "declining URL %s", url);
    return DECLINED;
}

Si vous regardez attentivement les journaux - je ne l'ai remarqué qu'en regardant le code qui émet le message - vous verrez que ce qui devrait être fcgi://...mal orthographié estfgci://...

Donc, quand vous voyez, declining URLcela signifie soit:

  • Vous n'avez pas de gestionnaire chargé qui accepte le service (par exemple, fcgi :), ou
  • vous avez mal orthographié le nom du service.
Cameron Kerr
la source
1
J'ai voté positivement à cause de la partie "Lorsque vous voyez cette erreur, cela signifie ..." de cette réponse. Je pense que cela devrait conduire la plupart des chercheurs dans la bonne direction.
threeve