Apache-Reverse-Proxy: kein Protokollhandler


20

Ich versuche, einen Reverse-Proxy mit Apache zu konfigurieren, erhalte jedoch eine No protocol handler was valid for the URLFehlermeldung, die ich nicht verstehe.

Dies ist die relevante Konfiguration von 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/

Die Anfragen erreichen Apache als:

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

Und sie sollten an meinen internen Dienst weitergeleitet werden, der sich unter folgender Adresse befindet:

0.0.0.0:8000/services/EchoService.py

Dies sind die Protokolle:

==> /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"

Antworten:


26

Ich habe das Problem gefunden. Das proxy_httpModul muss auch in Apache aktiviert sein (ich hatte nur proxy_htmlund proxy)


23

Für mich auf Apache httpd 2.4geschah dies, weil mir der abschließende Schrägstrich fehlte:

Funktioniert nicht:

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

Hat funktioniert!

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

( /am Ende hinzugefügt )


Für mich funktioniert Apache 2.2.15, <kbd> / </ kbd> am Ende. DANKE!

hat mir bei Apache / 2.4.10 (Debian) geholfen. Dies muss dokumentiert werden! Die Fehlermeldung ist extrem stumpf
DeveloperChris

2

Für diejenigen, die nach Antworten suchen, ist eine andere Möglichkeit, dass der URL-Dienstname für das Back-End fehlt. Bei LogLevel Debug und mod_proxy und mod_proxy_fcgi wurde Folgendes angezeigt:

[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.

Zum Glück ist der Code für mod_proxy_fastcgi (Ich bin für Apache 2.2 auf RHEL6 ein Backport verwenden) ist verfügbar unter https://github.com/ceph/mod-proxy-fcgi/blob/master/mod_proxy_fcgi.c#L805 , was das ist Stück Code:

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

Wenn Sie sich die Protokolle genau ansehen - ich habe es erst bemerkt, als ich den Code betrachtete, der die Meldung ausgibt -, werden Sie fcgi://...feststellen, dass das, was sein sollte, falsch geschrieben istfgci://...

Wenn Sie also sehen declining URL, bedeutet dies entweder:

  • Es ist kein Handler geladen, der den Dienst akzeptiert (z. B. fcgi :) oder
  • Sie haben den Dienstnamen falsch geschrieben.

1
Ich habe wegen des Teils "Wenn du diesen Fehler siehst, bedeutet das ..." dieser Antwort upgestimmt. Ich bin der Meinung, dass dies die meisten Suchenden in die richtige Richtung führen sollte.
Dreizehn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.