Httpd que devuelve el servicio 503 no disponible con mod_proxy para Tomcat 8

81

Estoy intentando integrar Tomcat con Apache. Mi objetivo es redirigir todas las solicitudes con http://localhost/myappahttp://localhost:8080

Seguí esta guía: http://tomcat.apache.org/tomcat-8.0-doc/proxy-howto.html

Mi httpd.confaspecto es así:

Include conf.modules.d/*.conf
LoadModule proxy_module  modules/mod_proxy.so

ProxyPass         /myapp  http://localhost:8080 retry=0 timeout=5
ProxyPassReverse  /myapp  http://localhost:8080

Mi server.xml en apache-tomcat se ve así:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" proxyPort="80" />

Ahora, cuando pruebo la URL http://localhost/myapp, da 503 Service Unavailableerror.

Tanto Tomcat como Apache están en funcionamiento. La URL http://localhost:8080funciona bien.

¿Puede haber algún problema con los permisos de archivo?

Para tomcatel usuario y el grupo son root/rooty para httpd, el usuario y el grupo sonapache/apache

¿Me estoy perdiendo algo o lo estoy haciendo mal?

La versión de Httpd es 2.4.6 y la versión de Tomcat es 8.0

Los registros de error httpd:

[proxy:error] [pid 19905] (13)Permission denied: AH00957: HTTP: attempt to connect to 127.0.0.1:8080 (localhost) failed

[proxy:error] [pid 19905] AH00959: ap_proxy_connect_backend disabling worker for (localhost) for 0s

[proxy_http:error] [pid 19905] [client ::1:51615] AH01114: HTTP: failed to make connection to backend: localhost

¡Resuelto!

La respuesta está aquí: http://sysadminsjourney.com/content/2010/02/01/apache-modproxy-error-13permission-denied-error-rhel/

usuario2354302
fuente
3
Gracias por la pista. Encontré este sysadminsjourney.com/content/2010/02/01/… que resolvió el problema
user2354302
Mejor elimine la opción de reintento y tiempo de espera y verifique
KNOWARTH
3
FWIW, recibí el error 503 pero con un tiempo de espera. Resultó que para mis ProxyPass*líneas no podía usar mi nombre de servidor real y en su lugar necesitaba usar localhostmi dirección IP, por ejemplo, ProxyPass / http://localhost/funcionó pero ProxyPass / http://example.com/no lo hizo.
inanutshellus

Respuestas:

129

(Respondido por el OP en una edición de pregunta. Convertido en una respuesta de wiki de la comunidad. Consulte Pregunta sin respuestas, pero problema resuelto en los comentarios (o extendido en el chat) )

El OP escribió:

La respuesta está aquí: http://sysadminsjourney.com/content/2010/02/01/apache-modproxy-error-13permission-denied-error-rhel/

Que es un enlace a un blog que explica:

SELinux en RHEL / CentOS se envía por defecto para que los procesos httpd no puedan iniciar conexiones salientes, que es justo lo que intenta hacer mod_proxy.

Si este es el problema, se puede resolver ejecutando:

 /usr/sbin/setsebool -P httpd_can_network_connect 1

Y para obtener una fuente de información más definitiva, consulte https://wiki.apache.org/httpd/13PermissionDenied

Brian Tompsett - 汤 莱恩
fuente
3
Creo que no es la única razón que causa 503. Porque SELinux está deshabilitado. Podría ser el error de configuración de VirtualHost.
Stamaimer
6

esto funcionó para mí:

ProxyRequests     Off
ProxyPreserveHost On
RewriteEngine On

<Proxy http://localhost:8123>
Order deny,allow
Allow from all
</Proxy>

ProxyPass         /node  http://localhost:8123  
ProxyPassReverse  /node  http://localhost:8123
Daniel
fuente
1
¿Cuál es el nombre del archivo y la ubicación?
Manish
2
repentinamente hoy el proxy apache dejó de funcionar solo para 443 en la máquina local con la IP 1.2.3.4, así que cambiando de ProxyPass / http:// 1.2.3.4:1234 a ProxyPass / http://localhost:1234 (igualmente hecho para ProxyPassReverse), no sé por qué sucedió esto hoy. UnattendedUpdate no instaló cosas relacionadas con Apache y no se ejecutó hoy.
eli
@Manish el archivo /etc/apache2/sites-available/your-domain.com-le-ssl.conf o el equivalente de Centos. y sí, cambiar my-dom.com: <port> a localhost: <port> funcionó para mí también en ubunbtu
Nelles
6

Resolver problema de inmediato, está relacionado con la seguridad interna

Nosotros, SnippetBucket.com, que trabaja para Enterprise Linux RedHat, encontramos que el servidor httpd no permite que se ejecute el proxy, ni localhost o 127.0.0.1, ni ningún otro dominio externo.

Como se encontró la investigación en el registro del servidor

[error] (13)Permission denied: proxy: AJP: attempt to connect to
   10.x.x.x:8069 (virtualhost.virtualdomain.com) failed

El registro de auditoría encontró un problema de puerto similar

type=AVC msg=audit(1265039669.305:14): avc:  denied  { name_connect } for  pid=4343 comm="httpd" dest=8069 
scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket

Debido a la seguridad interna predeterminada de Linux, esta causa, ahora para arreglar (temporal)

 /usr/sbin/setsebool httpd_can_network_connect 1

Resolver problema permanente

/usr/sbin/setsebool -P httpd_can_network_connect 1
Tanque Tejas
fuente
0

En la versión 7.5.1804 de CentOS Linux, pudimos hacer que esto funcione editando / etc / selinux / config y cambiando la configuración de SELINUX así:

SELINUX=disabled
Paul Cuddihy
fuente