22 votes

Apache reverse proxy : pas de gestionnaire de protocole

J'essaie de configurer un proxy inverse avec Apache, mais je reçois un message d'erreur. No protocol handler was valid for the URL erreur, que je ne comprends pas.

C'est la configuration pertinente 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 requêtes arrivent à apache en tant que :

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"

29voto

kmicu Points 1

J'ai trouvé le problème. Le site proxy_http doit aussi être activé dans Apache (je n'avais que le module proxy_html y proxy )

23voto

soger Points 101

Pour moi, sur apache httpd 2.4 c'est arrivé parce que j'avais oublié le slash de fin :

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

Ça a marché !

    <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)

2voto

Cameron Kerr Points 978

Pour ceux qui cherchent des réponses, une autre possibilité est que le nom de service de l'URL vers le 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 du mod_proxy_fastcgi (j'utilise un backport pour Apache 2.2 sur RHEL6) est disponible à l'adresse suivante https://github.com/ceph/mod-proxy-fcgi/blob/master/mod_proxy_fcgi.c#L805 qui est ce 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://... est mal orthographié comme fgci://...

Donc quand vous voyez declining URL ça veut dire soit :

  • Vous n'avez pas de gestionnaire chargé qui accepte le service (par exemple, fcgi :), ou
  • vous avez mal orthographié le nom du service.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X