it-swarm.com.de

Apache Proxy: Es war kein Protokollhandler gültig

Ich versuche, ein Unterverzeichnis auf einen anderen Server zu übertragen. Meine httpd.conf:

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

Das Problem ist, dass Apache dies immer protokolliert:

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/

Nachdem ich im Internet gesucht habe, habe ich diese Module aktiviert:

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

(Ich weiß, dass ich nicht alle brauche, aber ich habe sie nur aktiviert, um sicherzugehen, dass ich keine verpasse.)

Dieser Fehler tritt jedoch weiterhin auf und die Clients erhalten HTTP 500.

Wie kann ich das beheben?

161
das_j

Dies kann passieren, wenn Sie nicht mod_proxy_http aktiviert

Sudo a2enmod proxy_http

Damit mein https-basierter Load Balancer funktioniert, musste ich Folgendes aktivieren:

Sudo a2enmod ssl
Sudo a2enmod proxy
Sudo a2enmod proxy_balancer
Sudo a2enmod proxy_http
359
Brad Parks

Damit meine Installation von Apache2.4 + php5-fpm funktioniert, musste ich die folgenden Apache-Module aktivieren:

Sudo a2enmod proxy
Sudo a2enmod proxy_fcgi

Es wird kein proxy_http Benötigt, und dies ist der Grund, warum alle .php - Dateien direkt an php5-fpm gesendet werden:

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

In meinem Fall brauchte ich proxy_ajp Modul.

a2enmod proxy proxy_http proxy_ajp 
10
kujiy

Ich poste hier eine Antwort, da ich aus einem anderen Grund die gleiche Fehlermeldung hatte.

Diese Fehlermeldung kann beispielsweise auftreten, wenn Sie Apache httpd verwenden, um Anforderungen von einer Quelle in Protokoll A an ein Ziel in Protokoll B zu übermitteln.

Hier ist das Beispiel meiner Situation:

AH01144: Für die URL/sockjs-node/info war kein Protokollhandler gültig (Schema 'ws').

Im obigen Fall geschah einfach Folgendes. Ich hatte Mod Proxy aktiviert, um Websocket-Anfragen an NodeJS basierend auf Path/SockJS-Node zu proxen.

Das Problem ist, dass der Knoten den Pfad/sockjs-Knoten nicht ausschließlich für Websocket-Anforderungen verwendet. Dieser Pfad wird auch zum Hosten von REST Entypoints verwendet, die Informationen zu Websockets liefern.

Auf diese Weise versucht Apache httpd beim Versuch, http: // localhost: 7001/sockjs-node/info zu öffnen, den Restaufruf vom HTTP-Protokoll an einen Webscoket-Endpunkt weiterzuleiten Anruf. Node hat dies nicht akzeptiert.

Dies führte zu der obigen Ausnahme.

Denken Sie also daran, dass Apache httpd Sie informiert, dass das Protokoll, das Sie auf dem Zielserver verwendet haben, ungültig ist, auch wenn Sie die richtigen Module aktivieren und versuchen, eine falsche Weiterleitung durchzuführen.

4
99Sono

Um dies für die Zukunft zu verdeutlichen, ist a2enmod, wie in mehreren Antworten oben vorgeschlagen, für Debian/Ubuntu. Red Hat verwendet dies nicht, um Apache-Module zu aktivieren. Stattdessen werden LoadModule-Anweisungen in httpd.conf verwendet.

Mehr hier: https://serverfault.com/questions/56394/how-do-enable-Apache-modules-from-the-command-line-in-redhat

Die Auflösung/richtige Antwort finden Sie in den Kommentaren zum OP:

Ich denke, Sie brauchen mod_ssl und SSLProxyEngine mit ProxyPass - Deadooshka 29. Mai 14 um 11:35

@ Deadooshka Ja, das funktioniert. Wenn du dies als Antwort postest, kann ich es akzeptieren - das_j 29. Mai 14 um 12:04

4
em_bo

Dies geschah für mich in meinem Apache/2.4.18 (Ubuntu) Setup. In meinem Fall war der Fehler, den ich sah:

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

Die dazugehörige Konfiguration war:

  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/" Bedeutete, dass Apache die Anfrage, die an "ws://127.0.0.1:8090/~socket.io/" Gesendet wurde, nicht verarbeiten konnte.

Ich hatte proxy_http Geladen, brauchte aber auch proxy_wstunnel. Sobald das aktiviert war, war alles gut.

3
Michael Rush

Ich habe versucht, einen uwsgi:// Zum Laufen zu bringen, aber irgendwie war mir im Handbuch klar, dass ich tatsächlich mod_proxy_uwsgi Brauchte. Es war nicht. Und so geht's: Wie kompiliert man mod_proxy_uwsgi oder mod_uwsgi?

0
Chris