pass mod_proxy example enable configurar apache httpd.conf apache-modules apache2.4

mod_proxy - Apache Proxy: ningún manejador de protocolo era válido



reverse proxy location apache (5)

Estoy tratando de proxy de un subdirectorio a otro servidor. Mi httpd.conf:

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

El problema es que Apache siempre está registrando esto:

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/

Entonces, después de buscar en Internet, he activado estos módulos:

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

(Sé que no los necesito a todos, pero los activé para asegurarme de que no me falta ninguno)

Pero este error aún aparece y los clientes obtienen un HTTP 500.

¿Cómo puedo arreglar esto?


En mi caso, necesitaba el módulo proxy_ajp .

a2enmod proxy proxy_http proxy_ajp


Esto puede suceder si no tiene habilitado mod_proxy_http

sudo a2enmod proxy_http

Para que funcione el equilibrador de carga basado en https, tuve que habilitar lo siguiente:

sudo a2enmod ssl sudo a2enmod proxy sudo a2enmod proxy_balancer sudo a2enmod proxy_http


Estoy publicando una respuesta aquí, ya que tenía el mismo mensaje de error por un motivo diferente.

Este mensaje de error puede ocurrir, por ejemplo, si está utilizando apache httpd para enviar solicitudes de un origen en el protocolo A al destino en el protocolo B.

Aquí está el ejemplo de mi situación:

AH01144: Ningún controlador de protocolo era válido para la URL / sockjs-node / info (esquema ''ws'').

En el caso anterior, lo que sucedía era simplemente lo siguiente. Había habilitado el proxy mod para proxy las solicitudes de websocket a nodejs en función de la ruta / sockjs-node.

El problema es que el nodo no usa la ruta / sockjs-node para solicitudes de websocket exclusivamente. También utiliza esta ruta para alojar puntos de entrada REST que entregan información sobre websockets.

De esta forma, cuando la aplicación intente abrir http://localhost:7001/sockjs-node/info , apache httpd intentará enrutar la llamada restante desde el protocolo HTTP a una llamada de punto final Webscoket. Nodo no aceptó esto.

Esto lleva a la excepción anterior.

Así que tenga en cuenta que incluso si habilita los módulos correctos, si intenta hacer el reenvío incorrecto, esto finalizará con apache httpd que le informa que el protocolo que intentó usar en el servidor de destino no es válido.


Para aclarar para referencia futura, a2enmod, como se sugiere en varias respuestas anteriores, es para Debian / Ubuntu. Red Hat no usa esto para habilitar los módulos de Apache, sino que usa las instrucciones de LoadModule en httpd.conf.

Más aquí: https://serverfault.com/questions/56394/how-do-i-enable-apache-modules-from-the-command-line-in-redhat

La resolución / respuesta correcta está en los comentarios en el PO:

Creo que necesitas mod_ssl y SSLProxyEngine con ProxyPass - Deadooshka 29 de mayo de 14 a 11:35

@Deadooshka Sí, esto está funcionando. Si publica esto como respuesta, puedo aceptarlo - das_j 29 de mayo de 14 a 12:04


Para que mi instalación Apache2.4 + php5-fpm comenzara a funcionar, necesitaba activar los siguientes módulos de Apache:

sudo a2enmod proxy sudo a2enmod proxy_fcgi

No es necesario proxy_http , y esto es lo que envía todos los archivos .php directamente a php5-fpm:

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