Apache redirecciona a otro puerto

He luchado con esto por un tiempo y definitivamente estoy haciendo algo mal.

Tengo un servidor apache y un servidor JBoss en la misma máquina. Me gustaría redireccionar el tráfico de mydomain.com a JBoss localhost: 8080 / example. El DNS actualmente está configurado para mydomain.com y irá directamente al puerto 80 cuando se ingrese al navegador.

Mi pregunta es ¿cómo puedo redireccionar a un puerto diferente cuando un determinado nombre de dominio llega a apache (en este caso, “midominio.com”)?

 ProxyPreserveHost On ProxyRequests Off ServerName mydomain.com ProxyPass http://mydomain.com http://localhost:8080/example ProxyPassReverse http://mydomain.com http://localhost:8080/example  

ACTUALIZADO con sugerencias – Todavía no reenviar al puerto 8080

  ProxyPreserveHost On ProxyRequests Off ServerName mydomain.com ServerAlias www.mydomain.com ProxyPass http://mydomain.com http://localhost:8080/example ProxyPassReverse http://mydomain.com http://localhost:8080/example  

Debe dejar fuera el dominio http://example.com en ProxyPass y ProxyPassReverse y dejarlo como / . Además, debe dejar el / al final del example/ al que está redirigiendo. Además, tuve algunos problemas con http://example.com vs. http://www.example.com . Solo el www funcionó hasta que hice ServerName http://www.example.com y ServerAlias ​​example.com. Dale una oportunidad al siguiente.

  ProxyPreserveHost On ProxyRequests Off ServerName www.example.com ServerAlias example.com ProxyPass / http://localhost:8080/example/ ProxyPassReverse / http://localhost:8080/example/  

Después de realizar estos cambios, agregue los módulos necesarios y reinicie apache

 sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart 

Resolví este problema con el siguiente código:

 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so  ProxyPreserveHost On ProxyRequests Off ServerName myhost.com ServerAlias ww.myhost.com ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/  

También utilicé:

 a2enmod proxy_http 

Quería hacer exactamente esto para poder acceder a Jenkins desde el dominio raíz.

Descubrí que tenía que desactivar el sitio predeterminado para que funcione. Esto es exactamente lo que hice.

 $ sudo vi /etc/apache2/sites-available/jenkins 

E inserte esto en el archivo:

  ProxyPreserveHost On ProxyRequests Off ServerName mydomain.com ServerAlias mydomain ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/  Order deny,allow Allow from all   

A continuación, debe habilitar / deshabilitar los sitios apropiados:

 $ sudo a2ensite jenkins $ sudo a2dissite default $ sudo service apache2 reload 

Espero que ayude a alguien.

Encontré esto por prueba y error. Si su configuración especifica un ServerName, entonces su directiva VirtualHost necesitará hacer lo mismo. En el siguiente ejemplo, awesome.example.com y amazing.ejemplo.com se reenviarían a algún servicio local que se ejecute en el puerto 4567.

 ServerName example.com:80  ProxyPreserveHost On ProxyRequests Off ServerName awesome.example.com ServerAlias amazing.example.com ProxyPass / http://localhost:4567/ ProxyPassReverse / http://localhost:4567/  

Sé que esto no responde exactamente la pregunta, pero la estoy planteando aquí porque este es el resultado de búsqueda superior para el reenvío de puertos Apache. Entonces creo que ayudará a alguien algún día.

Debe asegurarse de que el proxy esté habilitado en el servidor. Puedes hacerlo usando los siguientes comandos:

  a2enmod proxy a2enmod proxy_http service apache2 restart 

Si no tiene que usar un proxy para JBoss y mydomain.com:8080 puede estar “expuesto” al mundo, entonces yo haría esto.

  ServerName mydomain.com Redirect 301 / http://mydomain.com:8080/  

Esta podría ser una vieja pregunta, pero esto es lo que hice:

En un archivo .conf cargado por apache:

  ServerName something.com ProxyPass / http://localhost:8080/  

Explicación: escuche todas las solicitudes en el puerto 80 de la máquina local. Si solicité ” http://something.com/somethingorother “, reenvíe esa solicitud a ” http://localhost:8080/somethingorother “. Esto debería funcionar para un visitante externo porque, de acuerdo con los documentos, asigna la solicitud remota al espacio del servidor local.

Estoy ejecutando Apache 2.4.6-2ubuntu2.2, así que no estoy seguro de cómo el “-2ubuntu2.2” afecta la aplicabilidad más amplia de esta respuesta.

Después de realizar estos cambios, agregue los módulos necesarios y reinicie apache

 sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart 

Solo use un Proxy inverso en su configuración de apache (directamente):

 ProxyPass /foo http://foo.example.com/bar ProxyPassReverse /foo http://foo.example.com/bar 

Mire aquí la documentación de Apache sobre cómo usar el mod

Apache admite hosts virtuales basados ​​en nombres y basados ​​en IP. Parece que estás usando ambos, que probablemente no sea lo que necesitas.

Creo que en realidad estás tratando de configurar un hosting virtual basado en nombre , y para eso no necesitas especificar la dirección IP.

Pruebe para enlazar a todas las direcciones IP, a menos que realmente desee un alojamiento virtual basado en IP . Este puede ser el caso si el servidor tiene varias direcciones IP y desea servir sitios diferentes en diferentes direcciones. La configuración más común es (supongo) hosts virtuales basados ​​en nombre.

Necesitas 2 cosas:

  1. Agregue un ServerAlias www.mydomain.com a su configuración
  2. cambie su proxypass a ProxyPassMatch ^(.*)$ http://localhost:8080/example$1 , para posiblemente evitar que mod_dir y las barras posteriores interfieran.

Todos son excelentes ideas para acceder a los puertos a través de nombres de dominio en servidores virtuales. No olvide, sin embargo, habilitar servidores virtuales; esto puede ser comentado:

 NameVirtualHost *:80  allow from all  

Ejecutamos WSGI con un servidor Apache en el dominio sxxxx.com y un servidor golang que se ejecuta en el puerto 6800. Algunos firewalls parecen bloquear nombres de dominio con puertos. Esta fue nuestra solución:

  ProxyPreserveHost On ProxyRequests Off ServerName wsgi.sxxxx.com DocumentRoot "/home/dxxxx/www"  Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all  ScriptAlias /py/ "/home/dxxxx/www/py/" WSGIScriptAlias /wsgiprog /home/dxxxx/www/wsgiprog/Form/Start.wsgi   ProxyPreserveHost On ProxyRequests Off ServerName sxxxx.com ServerAlias www.sxxxx.com ProxyPass / http://localhost:6800/ ProxyPassReverse / http://localhost:6800/  

Mi apache escucha 2 puertos diferentes,

 Listen 8080 Listen 80 

Uso el 80 cuando quiero una URL transparente y no pongo el puerto después de que la URL sea útil para los servicios de Google que no permiten la URL local.

Pero uso el 8080 para desarrollo interno donde uso el puerto como referencia para un “entorno de desarrollo”

Esto también funciona en ISPConfig. En la lista de sitios web ingresa dentro de un dominio, haz clic en la pestaña Opciones, agrega estas líneas:;

 ProxyPass / http://localhost:8181/ ProxyPassReverse / http://localhost:8181/ 

Luego ve al sitio web y wolaa 🙂 Esto también funciona con el protocolo HTTPS.