J'utilise un conteneur HAPROXY comme point d'entrée pour un cluster HPC virtuel. Selon un préfixe, la demande est transmise à différents conteneurs.

:80/foswiki/ -> :80/foswiki/
:80/kibana/ -> :80/kibana/
:80/graphite-api/ -> :80/graphite-api/
...

La config que j'utilise est assez simple :

frontend http-in
    bind *:80
    acl uri_foswiki path_beg /foswiki
    use_backend srv_foswiki if uri_foswiki
    # gitlab
    default_backend srv_gitlab

backend srv_foswiki
    balance roundrobin
    cookie SERVERID insert
    option httpclose
    option forwardfor
    server foswiki 172.17.0.3:80 cookie

Le fait est qu'il existe des serveurs Web qui servent le site Web directement en tant que root, sans préfixe. 'Graphite-web', par exemple ou l'image gitlab.

J'essaie de couper le préfixe et de le transmettre plus loin, mais ce que je veux vraiment, c'est que l'haproxy conserve le préfixe dans le chemin et qu'il soit transparent pour le serveur principal. Si je clique sur 'gitlab_server:80/dashboard/', il devrait apparaître comme 'frontend_ip:80/gitlab/dashboard'.

backend srv_gitlab
    balance roundrobin
    #cookie SERVERID insert
    mode http
    reqrep ^([^\ ]*)\ /gitlab/(.*)     \1\ /\2
    balance roundrobin
    option forwardfor
    server gitlab 172.17.0.18:80 cookie

Je ne pense pas que ce soit une chose difficile à faire, mais il me semble que mes compétences sur Google sont quelque peu paralysées. A chaque fois je me retrouve avec des règles de réécriture qui ne gardent pas le préfixe.

N'importe qui? Christian

EDIT : Les adresses IP internes ne sont pas accessibles par l'utilisateur...

answer

Pour vous débarrasser des parties principales de l'URI, essayez

reqrep ^(GET|POST)\ /gitlab/(.*) \1\ /\2

c'est-à-dire extraire le HTTP methodinto \1et le chemin suivant la racine gitlab dans \2, puis les catégoriser en une requête complète.

Notez que cela peut ne pas suffire pour de nombreuses applications, car le serveur d'applications ne sait pas que les clients sont censés tout demander à l'intérieur d'un gitlab/répertoire racine virtuel . Par conséquent, les redirections vont apparemment "supprimer" le répertoire racine important.

De tels scénarios sont résolus plus facilement par exemple avec nginxet son mod_proxy ou même Apache.