ProxyPass: redirigir la URL del directorio al puerto no estándar

13

He estado buscando en Google y no he tenido mucho éxito en encontrar una respuesta. Estoy ejecutando un servidor en Ubuntu y tengo programas instalados que usan varios puertos no estándar. Cada uno usa un puerto diferente, en mi caso son 9090, 9091, 9092, 9093 y 9094. Configuré un servidor apache y tengo un nombre de dominio que ahora puede llegar a mi servidor en lugar de tener que escribir mi dirección IP. Lo que estoy buscando es una forma de crear directorios que puedan apuntar a los diferentes puertos que he enumerado. Quiero algo como:

https://www.mydomain.com/app1
https://www.mydomain.com/app2
http://www.mydomain.com/app3

Algunos de los puertos están sobre SSL, otros no, simplemente los puse en orden (9090-9094) para facilitar mi uso. Me gustaría que / app1 apunte al puerto SSL 9090, / app2 para que apunte al puerto SSL 9091 y / app3 para que apunte al puerto no SSL 9092. ¿Hay una manera simple de hacerlo? He intentado agregar ProxyPass y similares basados ​​en otras publicaciones, pero nada ha funcionado. ¿Necesito agregar un nuevo sitio?

Además, si esto implica editar archivos, lo que espero que sea así, sería muy apreciado si pudieras enumerar la ubicación predeterminada del archivo y dónde agregar cosas. Seguí viendo publicaciones que decían agregar ProxyPass, por lo que asumí que entraba en VirtualHost, pero no estaba completamente seguro. Básicamente, sé muy poco sobre la configuración del servidor web y necesito que me traten como tal.

Pido disculpas por las etiquetas incorrectas y agradezco el tiempo que tomó para leer la publicación y cualquier ayuda que pueda proporcionar.

EDITAR: para aclarar, las aplicaciones ya están accesibles a través de https://www.mydomain.com:9090, etc. Me gustaría una forma de usar https://www.mydomain.com/appNamepara llegar a la misma ubicación / página publicada por esas aplicaciones.

EDITAR 2: desde / etc / apache2 / sites-available / default

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass /app1 https://localhost:9090/
    ProxyPassReverse /app1 https://localhost:9090/
</VirtualHost>
Serneum
fuente
¿Puede publicar el resultado de las directivas de configuración que utilizó para configurar esto? Si están dentro de un vhost, ¿puedes publicar todo el vhost?
Marcos Velázquez
¿Configurar qué? Los puertos? Todos los puertos están configurados a través de la interfaz de usuario de sus respectivos programas y estoy buscando una manera de evitar tener que escribir los puertos al acceder a cada aplicación en mi servidor. Puedo examinar las aplicaciones para ver qué puedo encontrar, pero los puertos generalmente solo se almacenan en un archivo config.ini
Serneum
No, eso no. Quise decir que, si estás usando ProxyPass y otras cosas, debes haberlas colocado dentro de un vhost, ¿verdad? Si es así, ¿puede publicar todo el contenido de vhost si es posible? ie <VirtualHost 10.0.0.1:80 > ServerName server.domain.com DocumentRoot /usr/local/apache/htdocs </VirtualHost>
Marcos Velazquez
Había deshecho la mayoría de mis cambios para obtener una lista limpia antes de pedir ayuda. Acabo de agregar el archivo / etc / apache2 / sites-available / default que tengo y agregué las cosas de Proxy al final según lo que había visto en varios otros sitios / búsquedas
Serneum

Respuestas:

13

Asegúrese de que los siguientes módulos de apache estén instalados y cargados:

mod_proxy
mod_proxy_http
mod_ssl

Puede verificar ejecutando el siguiente comando como root (suponiendo que httpd esté en su $ PATH)

httpd -t -D DUMP_MODULES

Luego, intente cambiar su configuración a la siguiente:

ProxyRequests Off
<Proxy *>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Proxy>
SSLProxyEngine on
ProxyPass /app1 https://localhost:9090
ProxyPassReverse /app1 https://localhost:9090

El proxy ahora debería funcionar si visita http://localhost/app1o http://mydomain.com/app1asume que mydomain.com apunta a localhost.

Marcos Velázquez
fuente
Mismo problema que antes, no tengo idea de cómo instalar mod_proxy y a2enmod mod_proxy dice que mod_proxy no existe. Seguiré buscando cómo obtener esos 3 mods para poder hacer que las cosas funcionen. Dicho esto, tengo proxy, proxy_http y ssl ejecutándose en este momento. Si eso es lo que necesito, entonces esta solución parece no funcionar. Recibo un mensaje prohibido que supongo que podría estar relacionado con ese "Permitir desde 127.0.0.1", pero no estoy del todo seguro
Serneum
Nota al margen, mydomain.com apunta a mi IP externa y no localhost. Intenté cambiar el localhost: 9090 a mi ip: 9090 pero sin éxito. ¿Está el "Permitir desde" y el " localhost " junto al ProxyPass en relación con el servidor o con respecto a lo que está intentando acceder?
Serneum
Lo tengo funcionando haciendo Permitir de todos temporalmente. Lo malo es que no aparece css, etc. en la página, pero ese es un tema completamente diferente que analizaré por mi cuenta. Gracias.
Serneum
¿A qué archivo de configuración debo agregar ProxyRequests Off <Proxy *> Order deny,allow Deny from all Allow from 127.0.0.1 </Proxy> SSLProxyEngine on ProxyPass /app1 https://localhost:9090 ProxyPassReverse /app1 https://localhost:9090?
kiltek
Los activos de la página que no se muestran pueden no ser un problema separado. La directiva ProxyPass aquí se aplica solo al documento (app1). Al directorio Proxy app1 con todo su contenido, agregue barras diagonales finales. ProxyPass /app1/ https://localhost:9090/y lo mismo para ProxyPassReverse si se usa. Y en segundo lugar, agregue la redirección RewriteRule: RewriteRule ^/app1$ /app1/ [R]como / app1 no se representaría en ese momento.
papo