ProxyPass: redirige l'URL du répertoire vers un port non standard

13

J'ai effectué des recherches sur Google et je n'ai pas réussi à trouver une réponse. J'exécute un serveur sur Ubuntu et j'ai installé des programmes qui utilisent divers ports non standard. Chacun utilise un port différent, dans mon cas ce sont 9090, 9091, 9092, 9093 et ​​9094. J'ai configuré un serveur apache et j'ai un nom de domaine qui peut maintenant atteindre mon serveur au lieu d'avoir à taper mon adresse IP. Ce que je recherche, c'est un moyen de créer des répertoires qui peuvent pointer vers les différents ports que j'ai répertoriés. Je veux quelque chose comme:

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

Certains ports sont sur SSL, d'autres non, je les mets juste en ordre (9090-9094) pour une facilité d'utilisation de ma part. J'aimerais que / app1 pointe vers le port SSL 9090, / app2 pour pointer vers le port SSL 9091 et / app3 pour pointer vers le port non SSL 9092. Existe-t-il un moyen simple de le faire? J'ai essayé d'ajouter ProxyPass et similaires sur la base d'autres publications, mais rien n'a fonctionné. Dois-je ajouter un nouveau site?

De plus, si cela implique la modification de fichiers, ce qui, je l'espère, serait grandement apprécié si vous pouviez indiquer l'emplacement par défaut du fichier et où ajouter des éléments. J'ai continué à voir des messages disant d'ajouter ProxyPass, alors j'ai simplement supposé que cela allait à l'intérieur de VirtualHost, mais je n'étais pas entièrement sûr. Fondamentalement, je connais très peu la configuration du serveur Web et je dois être traité comme tel.

Je m'excuse pour toute balise incorrecte et j'apprécie le temps que vous avez pris pour lire le message et toute l'aide que vous pouvez fournir.

EDIT: Pour plus de précision, les applications sont déjà accessibles via https://www.mydomain.com:9090, etc. Je voudrais juste un moyen d'utiliser https://www.mydomain.com/appNamepour arriver au même emplacement / page publié par ces applications.

EDIT 2: à partir de / 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
la source
Pouvez-vous publier la sortie des directives de configuration que vous avez utilisées pour configurer cela? S'ils sont à l'intérieur d'un vhost, pouvez-vous publier l'intégralité du vhost?
Marcos Velazquez
Mettre en place quoi? Les ports? Les ports sont tous configurés via l'interface utilisateur de leurs programmes respectifs et je cherche un moyen d'éviter d'avoir à taper les ports lors de l'accès à chaque application sur mon serveur. Je peux fouiller dans les applications pour voir ce que je peux trouver, mais les ports sont généralement stockés dans un fichier
config.ini
Non pas ça. Je voulais dire que, si vous utilisez ProxyPass et les autres choses, vous devez les avoir placés à l'intérieur d'un vhost, non? Si oui, pouvez-vous publier l'intégralité du contenu de vhost si possible? ie <VirtualHost 10.0.0.1:80 > ServerName server.domain.com DocumentRoot /usr/local/apache/htdocs </VirtualHost>
Marcos Velazquez
J'avais annulé la plupart de mes modifications afin d'obtenir une table rase avant de demander de l'aide. Je viens d'ajouter le fichier / etc / apache2 / sites-available / default que j'ai et j'ai ajouté les trucs de proxy à la fin en fonction de ce que j'avais vu sur divers autres sites / recherches
Serneum

Réponses:

13

Assurez-vous que les modules Apache suivants sont installés et chargés:

mod_proxy
mod_proxy_http
mod_ssl

Vous pouvez vérifier en exécutant la commande suivante en tant que root (en supposant que httpd est dans votre $ PATH)

httpd -t -D DUMP_MODULES

Ensuite, essayez de changer votre configuration comme suit:

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

Le proxy devrait maintenant fonctionner si vous visitez http://localhost/app1ou en http://mydomain.com/app1supposant que mydomain.com pointe vers localhost.

Marcos Velazquez
la source
Même problème que précédemment, je ne sais pas comment installer mod_proxy et a2enmod mod_proxy dit que mod_proxy n'existe pas. Je continuerai à chercher comment obtenir ces 3 mods afin que je puisse faire fonctionner les choses. Cela étant dit, j'ai actuellement proxy, proxy_http et ssl en cours d'exécution. Si c'est ce dont j'ai besoin, alors cette solution semble toujours ne pas fonctionner. Je reçois un message interdit qui, je suppose, pourrait être lié à celui "Autoriser à partir de 127.0.0.1" mais je ne suis pas tout à fait sûr
Serneum
Remarque: mydomain.com pointe vers mon adresse IP externe et non vers localhost. J'ai essayé de changer le localhost: 9090 en mon ip: 9090 mais sans succès. Le "Allow from" et le " localhost " à côté du ProxyPass sont-ils relatifs au serveur ou à ce qui essaie d'y accéder?
Serneum
Je l'ai fait fonctionner en faisant Allow from all temporairement. L'inconvénient est qu'aucun CSS, etc. n'apparaît sur la page, mais c'est un problème distinct que je vais examiner par moi-même. Merci.
Serneum
À quel fichier de configuration dois-je ajouter 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
Les éléments de page non affichés peuvent ne pas être un problème distinct. La directive ProxyPass s'applique ici au document (app1) uniquement. Dans le répertoire Proxy app1 avec tout son contenu, ajoutez des barres obliques de fin. ProxyPass /app1/ https://localhost:9090/et la même chose pour ProxyPassReverse si utilisé. Et deuxièmement, ajoutez la redirection RewriteRule: RewriteRule ^/app1$ /app1/ [R]car / app1 ne serait pas alors mandaté.
papo