Ayuda con configuración de Apache y tema puertos

Tengo Apache en marcha en mi server, en el cual tengo ejecutando varios servicios como Subsonic o Webmin por ejemplo. Tengo en la página principal enlaces a los diferentes servicios, para tener todo centralizado, y lo que hace cada enlace es redirigir a los puertos configurados en cada servicio. Lo que quiero es ocultar los puertos en la URL pero no hay manera, me explico:

Por ejemplo, cuando paso el ratón encima de la opción "Subsonic" (por poner un ejemplo nada más), ya me indica en la barra de direcciones que se va a conectar a http://xxx.xxx.xxx (mi dirección) e indica seguidamente el puerto, quedando como http://xxx.xxx.xxx:4040

Hay maneras de evitar esto, verdad? Me refiero, a que el enlace sea por ejemplo http://www.xxx.com/subsonic, y así no se vean los puertos.

He leído algo sobre proxypass o reverse y tras indagar un poco he hecho lo siguiente (aunque sigue sin funcionar...):

Habilitar proxypass con: a2enmod proxy_http

Crear el archivo subsonic en la carpeta /etc/apache2/sites-enabled

Escribir en ese archivo (sustituyo las xxx por mi dirección de FreeDNS, tengo un dominio gratuito allí):

<VirtualHost *:*>

ServerName subsonic

ProxyPreserveHost on

ProxyPass /subsonic http://xxx.xxx.xxx:4040/

ProxyPassReverse /subsonic http://xxx.xxx.xxx:4040/

</VirtualHost>


Reinicio apache

Escribo en la barra de direcciones: http://xxx.xxx.xxx/subsonic

Y nada, no me redirige a http://xxx.xxx.xxx:4040

Sabéis qué he hecho mal o qué debería hacer para hacerlo funcionar?
Buenas

El ProxyPass lo único que te hace es de eso.. de proxy.. es decir todo lo que venga de /subsonic te lo va a mandar a dónde le digas (en este caso al 4040)

Has probado la otra modalidad? Una RewriteRule.. no la he probado pero se me ocurre algo así:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^subsonic(.*) http://blablablbla.com:1234/$1 [P,L]


Ya me contarás :) Ahora lo probaré yo también xD
Delhora escribió:Buenas

El ProxyPass lo único que te hace es de eso.. de proxy.. es decir todo lo que venga de /subsonic te lo va a mandar a dónde le digas (en este caso al 4040)

Has probado la otra modalidad? Una RewriteRule.. no la he probado pero se me ocurre algo así:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^subsonic(.*) http://blablablbla.com:1234/$1 [P,L]


Ya me contarás :) Ahora lo probaré yo también xD


Primeramente gracias por responder

La verdad es que no he probado la solución que comentas, porque tampoco sé cómo usarlo... Nunca me he adentrado en este tipo de configuraciones de Apache y ando algo perdido, no sé qué archivos editar ni cómo editarlos correctamente

Lo del proxypass lo leí en varios tutoriales por google pero como ves, no lo he hecho funcionar, y se supone que con ello debería, pero no doy con la tecla...

A ver si tú también lo puedes probar como dices, sería de gran ayuda. También si me pudieras decir qué parámetros tengo que editar en mi caso con el código que me has puesto estaría genial

Un saludo y gracias de nuevo!
Hola

La RewriteRule iría en lugar del ProxPass, en fichero dentro del sites-enable (si es apache2) o en el httpd.conf

He hecho lo siguiente:

En el httpd.conf he creado un VirtualHost nuevo para probar (esto no hace falta que lo hagas, hazlo en el VirtualHost dónde tengas las aplicaciones)

<VirtualHost *:80>
        ServerName blablabla.blablabla.com
        CustomLog logs/blabla.log combined
        ErrorLog logs/blabla.log
        DocumentRoot /opt/webs/blabla
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/subsonic(.*) http://www.blablabla.com:1234/$1 [P,L]
</VirtualHost>


Haces un reload (service httpd reload // service apache2 reload)

Y ale, funciona, el puerto no se ve y me redirige a una web que estaba escuchando por ese puerto :)
Delhora escribió:Hola

La RewriteRule iría en lugar del ProxPass, en fichero dentro del sites-enable (si es apache2) o en el httpd.conf

He hecho lo siguiente:

En el httpd.conf he creado un VirtualHost nuevo para probar (esto no hace falta que lo hagas, hazlo en el VirtualHost dónde tengas las aplicaciones)

<VirtualHost *:80>
        ServerName blablabla.blablabla.com
        CustomLog logs/blabla.log combined
        ErrorLog logs/blabla.log
        DocumentRoot /opt/webs/blabla
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/subsonic(.*) http://www.blablabla.com:1234/$1 [P,L]
</VirtualHost>


Haces un reload (service httpd reload // service apache2 reload)

Y ale, funciona, el puerto no se ve y me redirige a una web que estaba escuchando por ese puerto :)


A ver si me entero...

Pongo el código que me has puesto, en el archivo que he creado yo antes (el achivo llamado subsonic, dentro de sites-enable) ?

Veo además que indicas documentroot y todo eso, como si tuviera la página web en el propio servidor, pero no es que tenga otra carpeta como tal, sino que son servicios como Subsonic, Transmission, Webmin y tal, que controlo via webapp.

Qué parámetro sería el que indica también el /loquesea que pongo? Me refiero a que el ejemplo sería con http://www.blablabla.com/subsonic , pero si en vez de eso luego quiero otra regla para http://www.blablabla.com/transmission ?

Ya lo siento si pregunto como un tonto pero es algo totalmente nuevo para mí

Gracias por tu ayuda!
Hola

Sin problema, pregunta lo que necesites :)

Entiendo que si pones todo en el sites-enable y haces un reload debería funcionar. Intento desglosar el código de abajo

Todo lo anterior lo puse, porqué en mi caso yo tengo más de un VirtualHost y los diferencio por ServerName, en tu caso que sólo tienes uno y viene por defecto bastaría con poner lo siguiente:

<VirtualHost *:80>
        CustomLog logs/blabla.log combined
        ErrorLog logs/blabla.log
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/subsonic(.*) http://www.blablabla.com:1234/$1 [P,L]
</VirtualHost>


Básicamente lo que hace es que cualquier petición que ataque al puerto 80 entrara al VirtualHost y ejecutara lo que tiene dentro. En este caso tiene una RewriteRule, que consta de:

RewriteCond %{SERVER_PORT} 80

Lo que marca esta directriz es que para ejecutar la Rule siguiente tiene que cumplir lo siguiente: Que el puerto sea el 80

Como lo cumple pasa a la RewriteRule:

        RewriteRule ^/subsonic(.*) http://www.blablabla.com:1234/$1 [P,L]


Lo que dice es que todo lo que venga desde http://tusite.com/subsonic lo envie a blablabla.com puerto 1234

Si lo que quieres cambiar es el contexto, en vez de subsonic sea pepito sería así:

        RewriteRule ^/pepe(.*) http://www.blablabla.com:1234/$1 [P,L]



No sé si te habré liado más :P
Delhora escribió:Hola

Sin problema, pregunta lo que necesites :)

Entiendo que si pones todo en el sites-enable y haces un reload debería funcionar. Intento desglosar el código de abajo

Todo lo anterior lo puse, porqué en mi caso yo tengo más de un VirtualHost y los diferencio por ServerName, en tu caso que sólo tienes uno y viene por defecto bastaría con poner lo siguiente:

<VirtualHost *:80>
        CustomLog logs/blabla.log combined
        ErrorLog logs/blabla.log
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/subsonic(.*) http://www.blablabla.com:1234/$1 [P,L]
</VirtualHost>


Básicamente lo que hace es que cualquier petición que ataque al puerto 80 entrara al VirtualHost y ejecutara lo que tiene dentro. En este caso tiene una RewriteRule, que consta de:

RewriteCond %{SERVER_PORT} 80

Lo que marca esta directriz es que para ejecutar la Rule siguiente tiene que cumplir lo siguiente: Que el puerto sea el 80

Como lo cumple pasa a la RewriteRule:

        RewriteRule ^/subsonic(.*) http://www.blablabla.com:1234/$1 [P,L]


Lo que dice es que todo lo que venga desde http://tusite.com/subsonic lo envie a blablabla.com puerto 1234

Si lo que quieres cambiar es el contexto, en vez de subsonic sea pepito sería así:

        RewriteRule ^/pepe(.*) http://www.blablabla.com:1234/$1 [P,L]



No sé si te habré liado más :P


Todavía no lo he podido probar porque estoy en el curro pero a ver si lo pruebo cuanto antes

De todas maneras más dudas al respecto:

A qué te refieres a que tú tienes varios servidores virtuales y por ello indicas uno al principio? Yo quiero poner esto para varios servicios, tendría que meter todo en un archivo o cómo iría la cosa? Para cada servicio tengo que crear un archivo como éste? Y una vez creados, tengo que habilitarlos o alguna cosa o simplemente con reiniciar apache ya está?

Te estoy cosiendo a preguntas pero quiero entender bien todo el proceso para luego hacerlo bien con el resto de servicios

Muchas gracias por tu ayuda de verdad
Hola

Lo tengo montado así porqué en un mismo server tengo diferentes sites

www.pagina1.com
www.pagina2.com
www.pagina3.com

Todas escuchan por el puerto 80, y para que cada una "cargue" el DocumentRoot o la aplicación pertinente las diferencio por virtualHost.

En tu caso no hace falta, puedes ponerlo todo en el mismo.

Saludos!
Delhora escribió:Hola

Lo tengo montado así porqué en un mismo server tengo diferentes sites

http://www.pagina1.com
http://www.pagina2.com
http://www.pagina3.com

Todas escuchan por el puerto 80, y para que cada una "cargue" el DocumentRoot o la aplicación pertinente las diferencio por virtualHost.

En tu caso no hace falta, puedes ponerlo todo en el mismo.

Saludos!


Entonces entiendo que mi archivo, que puedo renombrar a por ejemplo servicios que colocaré en la carpeta sites-enable lo rellenaré de la siguiente manera:

<VirtualHost *:80>
        CustomLog logs/subsonic.log combined
        ErrorLog logs/subsonic.log
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/subsonic(.*) http://www.midireccion.com:4040/$1 [P,L]
</VirtualHost>

<VirtualHost *:80>
        CustomLog logs/transmission.log combined
        ErrorLog logs/transmission.log
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/transmissionc(.*) http://www.midireccion.com:8080/$1 [P,L]
</VirtualHost>

<VirtualHost *:80>
        CustomLog logs/webmin.log combined
        ErrorLog logs/webmin.log
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/webmin(.*) http://www.midireccion.com:10000/$1 [P,L]
</VirtualHost>



Estoy en lo cierto o me he montado mi propia película?
Hola

Tal y como lo has puesto funcionaría, pero la única ventaja que tendrías allí es que tendrías los logs separados (que no creo que te interese ahora)
Esto así debería funcionar :P

<VirtualHost *:80>
        CustomLog logs/apache.log combined
        ErrorLog logs/apache.log
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/subsonic(.*) http://www.midireccion.com:4040/$1 [P,L]
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/transmissionc(.*) http://www.midireccion.com:8080/$1 [P,L]
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/webmin(.*) http://www.midireccion.com:10000/$1 [P,L]
</VirtualHost>


Ahora se me ha ido de la cabeza y no se si poniendo sólo un RewriteCond al principio funcionaria o daría problemas XD
Delhora escribió:Hola

Tal y como lo has puesto funcionaría, pero la única ventaja que tendrías allí es que tendrías los logs separados (que no creo que te interese ahora)
Esto así debería funcionar :P

<VirtualHost *:80>
        CustomLog logs/apache.log combined
        ErrorLog logs/apache.log
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/subsonic(.*) http://www.midireccion.com:4040/$1 [P,L]
        RewriteRule ^/transmissionc(.*) http://www.midireccion.com:8080/$1 [P,L]
        RewriteRule ^/webmin(.*) http://www.midireccion.com:10000/$1 [P,L]
</VirtualHost>


A ver si cuando llegue a casa lo puedo probar (que igual es mañana...). A ver si lo pruebo cuanto antes y te digo si ha funcionao

Te debo un par de cañas desde ya! [beer]
Me permitís una consulta RELACIONADA con esas dudas? Estoy lidiando con mi servidor y tengo problemas con algo parecido.

En el caso del autor habéis resuelto la duda de cómo enlazar a una página desde una página índice, yo le doy una vuelta de tuerca.

¿Cómo se podría, supongo que algún virtualhost pero a saber, crear un enlace directo al servicio en cuestión sólo por el puerto y no por la dirección?

Me explico un poco más: imaginaros que quiero entrar para transmission directamente a "ipdelordenador:9091". Esto se hace por virtualhost (si es así agradecería enormemente un ejemplo! ellos entrarían en este caso por transmission.midominio.es en el puerto 80), otro método o directamente no se puede? Querría hacer algo muy parecido a lo que quiere el autor del hilo pero en lugar de una página índice yo quiero usar subdominios (transmission.midominio.es, owncloud.midominio.es y similares)

PD: Espero que al autor del hilo no le moleste la consulta al ser completamente similar, si lo quieres "limpio" borro y abro hilo nuevo sin problemas
Ya que sale el tema, una duda relacionada...
En la universidad tienen capado el wifi y sólo deja acceder a páginas "normales", nada de urls con puertos, ¿configurando todo como dice el autor del post y delhora podría saltarme esa restricción?
Es que sólo me deja acceder a owncloud y me dejan sin música todo el día XD.
Delhora escribió:Hola

Tal y como lo has puesto funcionaría, pero la única ventaja que tendrías allí es que tendrías los logs separados (que no creo que te interese ahora)
Esto así debería funcionar :P

<VirtualHost *:80>
        CustomLog logs/apache.log combined
        ErrorLog logs/apache.log
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/subsonic(.*) http://www.midireccion.com:4040/$1 [P,L]
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/transmissionc(.*) http://www.midireccion.com:8080/$1 [P,L]
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^/webmin(.*) http://www.midireccion.com:10000/$1 [P,L]
</VirtualHost>


Ahora se me ha ido de la cabeza y no se si poniendo sólo un RewriteCond al principio funcionaria o daría problemas XD


[snif]

Siento decirlo pero sigue sin funcionarme...

He copiado esto tal cual en el archivo subsonic.conf (creado en sites-enable), poniendo mi dirección evidentemente, pero nada, me sale el típico 404, "The requested URL /subsonic was not found on this server"

Al principio no me pillaba el rewrite, lo intenté activar con a2enmod pero me decía que no existía, probé a poner el código en el archivo apache2.conf, tampoco iba, después activé el módulo rewrite siguiendo estos pasos http://sharadchhetri.com/2014/02/21/err ... ite-exist/ y ya se supone que ha quedado activado el módulo rewrite

Pero nada ha servido

He intentado cambiar "www.midirección.com" por "localhost" por si acaso, y tampoco. He hecho pruebas conectándome de una red interna como red externa, pero me sigue dando 404

Ah por cierto, me daba error al reiniciar el apache diciendo que no encontraba los archivos de log, por lo que en el código que me pusiste, he comentado las 2 líneas de lo del log, y me reiniciaba así apache sin problema, no creo que sea eso lo que falla la verdad

Alguna idea?
Hola!

Si, se me olvidó decir que necesitabas el mod_rewrite

Haz una cosa, pásame si quieres el archivo entero (si quieres omitir información sin problema, es para mirar la sintáxis).

Fichero apache2.conf
Fichero: sites-enable/loquesea.conf

A ver si lo sacamos!

flap0 escribió:Ya que sale el tema, una duda relacionada...
En la universidad tienen capado el wifi y sólo deja acceder a páginas "normales", nada de urls con puertos, ¿configurando todo como dice el autor del post y delhora podría saltarme esa restricción?
Es que sólo me deja acceder a owncloud y me dejan sin música todo el día XD.


Creo que no.. al fin y al cabo seguirá haciendo la conexión contra el puerto, lo único que la enmascara a nivel de URL para que no se vea :(

verdezito escribió:
Me explico un poco más: imaginaros que quiero entrar para transmission directamente a "ipdelordenador:9091". Esto se hace por virtualhost (si es así agradecería enormemente un ejemplo! ellos entrarían en este caso por transmission.midominio.es en el puerto 80), otro método o directamente no se puede? Querría hacer algo muy parecido a lo que quiere el autor del hilo pero en lugar de una página índice yo quiero usar subdominios (transmission.midominio.es, owncloud.midominio.es y similares)



Pues yo haría lo siguiente:

Hacer el VirtualHost por el puerto 80 con servername transmission.midominio.es (que es por dónde entraran los usuarios no?) Y ponerle un proxypass para que todo lo redireccione a dónde quieras... algo así:


<VirtualHost *:80>
        ServerName transmission.midominio.es
        CustomLog logs/apache.log combined
        ErrorLog logs/apache.log
        ProxyPass / "ipdelordenador:9091"
        ProxyPassReverse / "ipdelordenador:9091"
</VirtualHost>


Esto lo que haría es que todas las peticiones que cumplieran que van por el puerto 80 con hostname transmission.midominio.es las manda a esa url

Un saludo!
Somos ya 3 personas contestadas en el hilo (me muero por llegar a casa esta tarde y probarlo). Creo que hablo en nombre de los 3 cuando digo que deberíamos de hacer fondo común y poner dinero para hacerte una estatua, un millón de gracias!!!
No seria mas fácil hacer con IPtables?
16 respuestas