Je sais que j'ai déjà posé cette question, mais je n'ai pas obtenu de réponses à la question. Donc, en gros, j'ai une application node js qui s'exécute sur le port 5000. J'ai réussi à la rediriger vers le port 8080 à l'aide de la configuration haproxy suivante :

frontend http-in
    mode    http

    bind *:8080

    acl path-employeeList              path_beg -i /  
    use_backend employeeList-backend   if path-employeeList


backend employeeList-backend
    mode    http

    option  httplog
    option  forwardfor

    server  appserver1  206.189.22.155:5000

Je peux maintenant accéder à mon application à l' adresse http://206.189.22.155:8080 . Mais maintenant, dans cette URL, au lieu d'utiliser le numéro de port (8080), je souhaite accéder à mon application en utilisant un nom de chemin composé comme /ProcessDesigner.ie, l'application devrait être accessible à l' adresse http://206.189.22.155/ProcessDesigner .

Ce que j'ai essayé jusqu'à présent

frontend http-in
    mode    http

    bind *:8080

    acl path-page-designer              path_beg -i /ProcessDesigner
    use_backend page-designer-backend   if path-page-designer

backend page-designer-backend
    mode    http

    option  httplog
    option  forwardfor
    http-request set-path /ProcessDesigner


    server  appserver1 206.189.22.155:5000

lorsque j'appuie sur http://206.189.22.155/ProcessDesigner, il est indiqué que le site ne peut pas être atteint. Je fais cela pour que l'utilisateur n'ait pas à se souvenir du numéro de port et puisse simplement accéder à l'aide du nom de chemin. Alors pour cela, comment dois-je changer ma configuration. Aidez-moi en montrant un exemple utilisant ma config !!

MISE À JOUR en utilisant la redirection http vers https (80->443) et reqrep dans le backend.


frontend http-in
    mode    http

    bind *:80
    bind *:443 ssl crt /etc/ssl/private/mydomain.pem
    http-request redirect scheme https code 301 if !{ ssl_fc }

    acl path-employeeList              path_beg -i /ProcessDesigner
    use_backend employeeList-backend   if path-employeeList


backend employeeList-backend
    mode    http

    option  httplog
    option  forwardfor
    reqrep  ^([^\ :]+)\ /ProcessDesigner/?(.*)$  \1\ /\2

    server  appserver1 206.189.22.155:5000

Maintenant, avec cette configuration mise à jour, lorsque j'appuie sur https://206.189.22.155/, il est indiqué que le service 503 n'est pas disponible (aucun serveur n'est disponible pour gérer cette demande.) Et lorsque j'appuie sur https://206.189.22.155/ProcessDesigner, je ne vois aucune erreur. plus mais juste une page blanche vierge. Bien que je puisse voir le nom de l'onglet "échantillon" qui indique ou semble au moins avoir atteint l'application, il n'y a pas de sortie mais juste un écran blanc vierge.

answer

Ce que je peux voir dans votre exemple "ce que j'ai essayé": Vous vous connectez toujours au port 8080 au lieu de seulement 80 afin que le site ne soit pas accessible.

De plus, la ligne suivante n'est probablement pas ce que vous voulez.

http-request set-path /ProcessDesigner

Cela fait que la demande toujours adressée au backend est toujours /ProcessDesigner, éventuellement avec une chaîne de requête ajoutée.

Je peux imaginer que vous avez besoin d'une ligne comme celle-ci à la place pour supprimer le /ProcessDesigner de l'URI envoyé au backend :

reqrep  ^([^\ :]+)\ /ProcessDesigner/?(.*)$  \1\ /\2

Mais gardez à l'esprit que l'application doit être correctement conçue pour ne fournir que des chemins relatifs pour les ressources locales de l'application dans le corps de la réponse (ou doit au moins être configurable pour que vous puissiez définir le chemin de base pour de tels chemins).
Et il pourrait être nécessaire de réécrire également les en-têtes de réponse comme l'emplacement pour les redirections et set-cookie pour les cookies (d'autres en-têtes bien connus mais moins courants où cela s'appliquerait sont uri et content-location) car idéalement l'application n'a pas besoin de savoir le préfixe de l'URL utilisé par le client pour l'accès, mais le cookie doit être marqué avec le chemin d'accès du navigateur au site (il rsprepexiste pour faire de telles choses sur les en-têtes de réponse).