Apache-Proxy: Es war kein Protokollhandler gültig

190

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 mir keine fehlt.)

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

Wie kann ich das beheben?

das_j
quelle
Anscheinend wird ein HTTPS-Handler für die Proxy-Anforderung benötigt. Versuchen Sie stattdessen HTTP ...
Deadooshka
9
Ich denke du brauchst mod_sslund SSLProxyEnginemitProxyPass
Deadooshka
@Deadooshka Ja, das funktioniert. Wenn Sie dies als Antwort
posten
Mögliches Duplikat von Setup mod_proxy auf dem Apache http Server
Raedwald

Antworten:

418

Dies kann passieren, wenn Sie nicht mod_proxy_httpaktiviert haben

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
Brad Parks
quelle
23
Ich musste für meinen Anwendungsfall auch einen 'sudo a2enmod proxy_wstunnel' erstellen.
JimJty
8
Für mich war es LoadModule ssl_module modules/mod_ssl.so. Ich musste auch verwenden SSLProxyEngine on.
Chloe
1
Ich musste auch aktivierenmod_slotmem_shm
SiggyF
2
Für mich auf WAMP habe ich die Module oben über das Menü installiert und musste LoadModule slotmem_shm_module modules/mod_slotmem_shm.soin httpd.conf
Flion
1
Ich brauchte sudo a2enmod proxy_connect, um https mit CONNECT
Raul Nohea Goodness
22

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

sudo a2enmod proxy
sudo a2enmod proxy_fcgi

Keine Notwendigkeit proxy_http, und das ist es, was alle .phpDateien direkt an php5-fpm sendet :

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost"
</FilesMatch>
richtig
quelle
Ja, für fcgi ist das wahr, aber ich hatte einen HTTP-Proxy. :)
das_j
10

In meinem Fall brauchte ich ein proxy_ajpModul.

a2enmod proxy proxy_http proxy_ajp 
kujiy
quelle
8

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 diesbezügliche 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 an " ws://127.0.0.1:8090/~socket.io/" gesendete Anfrage nicht verarbeiten konnte.

Ich hatte proxy_httpgeladen, aber auch gebraucht proxy_wstunnel. Sobald dies aktiviert war, war alles gut.

Michael Rush
quelle
6

Zur Verdeutlichung ist a2enmod, wie in mehreren Antworten oben vorgeschlagen, für Debian / Ubuntu vorgesehen. Red Hat verwendet dies nicht, um Apache-Module zu aktivieren, sondern verwendet LoadModule-Anweisungen in httpd.conf.

Mehr hier: /server/56394/how-do-i-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 Uhr

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

em_bo
quelle
4

Ich poste hier eine Antwort, da ich aus einem anderen Grund dieselbe 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 übertragen.

Hier ist das Beispiel meiner Situation:

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

Im obigen Fall geschah einfach Folgendes. Ich hatte mod proxy aktiviert, um Websocket-Anfragen an nodejs basierend auf path / sockjs-node zu proxys.

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-Einstiegspunkten verwendet, die Informationen zu Websockets bereitstellen.

Auf diese Weise würde Apache httpd versuchen, den Restaufruf vom HTTP-Protokoll an einen Webscoket-Endpunktaufruf weiterzuleiten , wenn die Anwendung versuchen würde, http: // localhost: 7001 / sockjs-node / info zu öffnen. Node hat dies nicht akzeptiert.

Dies führte zu der obigen Ausnahme.

Beachten Sie also, dass selbst wenn Sie die richtigen Module aktivieren und versuchen, die falsche Weiterleitung durchzuführen, Apache httpd Sie darüber informiert, dass das Protokoll, das Sie auf dem Zielserver verwendet haben, ungültig ist.

99Sono
quelle
Es war wahrscheinlich proxy_wstunnel. Siehe ersten Kommentar zur akzeptierten Antwort.
Lerk
0

Für mich waren alle oben genannten Antworten auf xampp aktiviert und funktionierten immer noch nicht. Durch Aktivieren des folgenden Moduls funktionierte der virtuelle Host wieder

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
Ali Azhar
quelle