Apache Proxy: aucun gestionnaire de protocole n'était valide
j'essaie de proxy un sous-répertoire à un autre serveur. Mon httpd.conf:
RewriteEngine On
ProxyPreserveHost On
RewriteRule .*subdir/ https://anotherserver/subdir/ [P]
le problème est Qu'Apache enregistre toujours ceci:
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/
donc après avoir cherché sur internet, j'ai activé ces modules:
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
(je sais que je n'ai pas besoin d'eux tous, mais j'ai juste activé pour être sûr que je ne suis pas en manque un)
mais cette erreur apparaît toujours et les clients obtiennent un HTTP 500.
Comment puis-je réparer ça?
6 réponses
cela peut arriver si vous n'avez pas mod_proxy_http
activé
sudo a2enmod proxy_http
pour que mon équilibreur de charge basé sur https fonctionne, je devais activer ce qui suit:
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
pour mon Apache2.4 + installation de php5-fpm pour commencer à travailler, J'avais besoin d'activer les modules Apache suivants:
sudo a2enmod proxy
sudo a2enmod proxy_fcgi
pas besoin de proxy_http
, et c'est ce qui envoie tous les fichiers .php
directement à php5-fpm:
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost"
</FilesMatch>
dans mon cas, j'avais besoin du module proxy_ajp
.
a2enmod proxy proxy_http proxy_ajp
pour clarifier pour référence future, a2enmod, comme suggéré dans plusieurs réponses ci-dessus, est Pour Debian/Ubuntu. Red Hat ne l'utilise pas pour activer les modules Apache - il utilise plutôt des instructions LoadModule dans httpd.conf.
La résolution/bonne réponse est dans les commentaires sur l'OP:
je pense que vous avez besoin de mod_ssl et SSLProxyEngine avec la directive ProxyPass – Deadooshka 29 Mai '14 à 11:35
@Deadooshka oui, ça marche. Si vous postez ceci comme une réponse, je peux l'accepter - das_j May 29 '14 à 12: 04
je poste une réponse ici, puisque j'ai eu le même message d'erreur pour une raison différente.
ce message d'erreur peut se produire, par exemple, si vous utilisez apache httpd pour lancer des requêtes proxy à partir d'une source sur le protocole a pour cibler le protocole B.
Voici l'exemple de ma situation:
AH01144: aucun gestionnaire de protocole n'était valide pour L'URL / sockjs-node / info (régime "ws").
dans le cas ci-dessus, ce qui s'est produit était simplement le suivant. J'avais activé mod proxy pour proxy les requêtes websocket à nodejs basées sur path /sockjs-node.
le problème est que node n'utilise pas le chemin /sockjs-node exclusivement pour les requêtes websocket. Il utilise également ce chemin pour héberger des points D'entrée REST qui fournissent des informations sur les websockets.
De cette manière, lorsque l'application essayez d'ouvrir http://localhost:7001/sockjs-node/info , apache httpd tenterait de router le reste de l'appel du protocole HTTP vers un terminal Web. Nœud n'accepte pas cela.
cela mène à l'exception ci-dessus.
veillez donc à ce que, même si vous activez les bons modules, Si vous tentez de faire la mauvaise redirection, cela se termine avec apache httpd vous informant que le protocole que vous avez essayé d'utiliser sur le serveur cible n'est pas valide.
j'ai essayé d'obtenir un uwsgi://
de travail, mais d'une certaine façon le manuel a pensé qu'il était clair pour moi que j'avais réellement besoin de mod_proxy_uwsgi
. Il ne l'était pas. Voici comment vous le faites: Comment compiler mod_proxy_uwsgi ou mod_uwsgi?