Aller au contenu

Haproxy Reverse Proxy Http://domain.fr/app


Arthrax

Messages recommandés

Bonjour,

Je suis en train de tester HAProxy et tout les tutos dispo utilisent des liens : http://application.domain.fr qui redirige vers http://localhost:port_application.

Je souhaiterai l'utiliser sous la forme http://domain.fr/application.

L'objectif de cette manip est de n'ouvrir qu'un seul port sur le net mais surtout économiser des €€€ en payant qu'un seul certificat SSL :P

Je viens de passer plusieurs heures à regarder la doc de HAProxy et la condition à utiliser dans les associations est if { hdr_end(Host) -i /application } pour lire la valeur en fin de ligne

C'est à dire si je tape l'url : http://domain.fr/sab je dois être rediriger vers http://localhost:8080/sabnzbd (je verrais après pour le rewriting <_< )

Malgré tout mes tests je suis toujours redirigé vers le backend par défaut :(

Est-ce que cette version de HAProxy diffère de la version original pour qu'elle puisse fonctionner sur un Syno ? Sinon quelqu'un à une idée de comment faire car la syntaxe me parait bonne?

Merci :)

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 58
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Merci pour ce lien qui m'a permis de comprendre mon erreur ^_^

Du coup, la bonne condition à appliquer est if { path_beg /application }

global
        daemon
        maxconn 256
        log localhost user info
        spread-checks 10

defaults
        mode http
        stats enable
        default-server inter 30s fastinter 5s
        log global
        option httplog
        timeout connect 5s
        timeout client 50s
        timeout server 50s
        timeout tunnel 1h

listen stats :8280
        stats uri /
        stats show-legends
        stats refresh 10s
        stats realm Haproxy Statistics
        stats auth xxxxxx:xxxxx

frontend http
        bind :5080
        option http-server-close
        option forwardfor
        default_backend web

frontend https
        bind :5443 ssl crt /usr/local/haproxy/var/crt/default.pem
        option http-server-close
        option forwardfor
        rspirep ^Location: http://(.*)$    Location: https://1
        use_backend dsm if { path_beg /dsm }
        use_backend sabnzbd if { path_beg /sab }
        use_backend sickbeard if { path_beg /sick }
        use_backend couchpotatoserver if { path_beg /couch }
        use_backend maraschino if { path_beg /ma }
        default_backend couchpotatoserver

backend web
        server web localhost: check

backend dsm
        server dsm localhost:5000 check

backend sabnzbd
        server sabnzbd localhost:8080 check

backend sickbeard
        server sickbeard localhost:8081 check

backend couchpotatoserver
        server couchpotatoserver localhost:5050 check

backend maraschino
        server maraschino localhost:8260 check

backend haproxy
        server haproxy localhost:8280 check

Voici mes tests et résultat sachant que mon backend par défaut est CouchPotato:

https://mondomain.fr/sab --> http://localhost:8080/sabnzbd avec une page vierge Internet Explorer ne peut pas afficher cette page web

https://mondomain.fr/sick --> Page 404 pendant une fraction de seconde --> https://mondomain.fr avec l'interface Couchpotato connecter

https://mondomain.fr/couch --> https://mondomain.fr/#couch avec l'interface Couchpotato connecter

https://mondomain.fr/mar --> https://mondomain.fr/mar avec Page 404

https://mondomain.fr/dsm --> https://mondomain.fr/dsm avec une page du serveur web du syno : Désolé, la page que vous recherchez est introuvable

Je ne comprends pas comment il est possible d'avoir autant de différence avec le même code :wacko: La seule application qui fonctionne est toujours celle que je définie par défaut.

Donc je dois pas être loin de la bonne config. :blink:

Quelqu'un à une idée ? :ph34r:

Lien vers le commentaire
Partager sur d’autres sites

C'est normal, il faut réécrire le path pour retirer le prefixe du backend. Sinon c'est comme si tu faisais pour sab : http://ip.de.ton.syno:8080/sab la page "/sab" sur sabnzbd n'existe pas.

http://cbonte.github.com/haproxy-dconv/configuration-1.5.html#4-reqrep

Regarde les exemples, ils réécrivent une requête en enlevant le /static/ et en le remplaçant par /. Tu peux faire pareil dans chacun de tes backends.

Modifié par Diaoul
Lien vers le commentaire
Partager sur d’autres sites

Merci :) et j'ai découvert les expressions régulière :)

Je viens de rajouter cette option dans le backend pour Sabnzbd : reqrep ^([^ :]*) /sab/(.*) 1 /2 et ça marche très bien

Maintenant j'ai un problème avec les applications SickBeard, DSM et CouchPotato, l'option précédente ne fonctionne pas.

Après avoir cherché, je pense que c'est dû à l'url interne de ces applis car un répertoire /xxxx/ est ajouté en fin mais non interprété par HAProxy :angry:

Par exemple si je veux me connecter sur SickBeard --> http://localhost:8081 lorsque la page est affichée, on a http://localhost:8081/home

Pour essayer de résoudre, j'ai remplacé l'option par reqrep ^([^ :]*) /sab/(.*) 1 /home/2 mais lorsque la page est affiché, je n'ai pas la mise en forme du texte ni les images comme s'il manquait la page css.

Je pense qu'il faut trouver un moyen de rendre la fin du reqrep dynamique mais je n'arrive pas à trouver la bonne syntaxe :wacko:

Lien vers le commentaire
Partager sur d’autres sites

Quand tu GET sur /sickbeard/ et que le backend ne le sait pas, il va te renvoyer des liens vers les menus qui ne contiennent pas le préfixe /sickbeard/ donc quand tu vas cliquer dessus ça ne va pas marcher.

Le problème c'est que quand tu GET /home parce que tu as un lien qui pointe vers /home dans sickbeard, HAProxy ne sait pas si tu veux vraiment GET /home ou si tu veux GET /sickbeard/home donc pas moyen de réécrire ta requete dans ce sens.

Il faudrait réécrire tout le contenu HTTP de ce que te renvoie sickbeard pour que les liens soient au bon format. Cette solution n'est pas envisageable.

Il ne te reste plus qu'a aller voir du coté des options web_root de sickbeard pour essayer d'y mettre /sickbeard et virer ta regexp de réécriture. Tu fais juste une redirection et ça devrait aller.

Lien vers le commentaire
Partager sur d’autres sites

Bien joué, ça a résolu tout mes problèmes :)

Voilà mes modifications pour les personnes intéressé :

  • Sickbeard : éditer le fichier /volume1/@appstore/sickbeard/var/config.ini et modifier la ligne web_root = /sick
  • CouchPotato : éditer le fichier /volume1/@appstore/couchpotatoserver/var/settings.conf et modifier la ligne url_base = couch
  • Maraschino : lancer l'interface graphique et cliquer en haut à gauche sur Manage --> Server settings et modifier Marachino webroot = /ma
  • DSM : Application par défaut du frontends

Merci Diaoul pour ton aide et tes explications.

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ce package et pour toutes ces infos

Je voudrais faire exactement la meme chose que toi antrax, mais n y arrive pas.

Pourrais tu decrire en details (nb compliant) les differentes etapes pour arriver a te connecter a sickbeard depuis http://www.domain.com/sickbeard

Dams les parametres d haproxy tout me parait configure et prtant rien ne se passe

Que faut il faire du "check" qui apparait dans le front ends?

(j ai tellement envie d utiliser ce package que je poste depuis mon telephone ne pouvant plus poster depuis mon pc...)

Merci pour ton aide

Lien vers le commentaire
Partager sur d’autres sites

  1. Connecte toi sur ton nas en putty
  2. Arrete le service SIckBeard
  3. Edite le fichier /volume1/@appstore/sickbeard/var/config.ini et modifie la ligne web_root = en web_root = /sickbeard
  4. Redemarre le service Sickbeard
  5. Creer une route sur ton routeur qui redirige le port de ton frontend HAProxy vers le port 80 à l'extérieur
  6. Verifie dans HAProxy que ton backend SickBeard correspond bien au port de ta config.
  7. Creer une nouvelle association dans HAProxy avec ton frontend http , ton backend SickBeard et avec la condition if { path_beg /sickbeard }
  8. Applique les modification dans HAProxy en cliquent sur Ecriture dans le premier menu
  9. Test avec http://www.domain.com/sickbeard

;)

Modifié par Arthrax
Lien vers le commentaire
Partager sur d’autres sites

excellent, je check ca des que je peux, merci beaucoup.

juste deux dernieres question

dans les backends j ai ca

name servers options

sickbeard sickbeard localhost:port check

le port est bon. que signifie ce check?

que signifie le 3. ? je forward le port 80 vers 5080 en gros?

Modifié par aurelized
Lien vers le commentaire
Partager sur d’autres sites

D'après ce que j'ai compris, le check n'est qu'une vérification faite par HAProxy pour voir si l'application répond bien.

Pour vois le résultat, il faut aller dans les logs, pour voir les logs il faut installer le Syslog server depuis le centre de packet.

Il faut mettre if { path_beg /sickbeard } dans HAProxy (Interace graphique) --> Associations --> Conditions (de ton association Frontend Http avec le Backend Sickbeard)

Lien vers le commentaire
Partager sur d’autres sites

daemon
maxconn 256
log localhost user info
spread-checks 10
defaults
mode http
stats enable
default-server inter 30s fastinter 5s
log global
option httplog
timeout connect 5s
timeout client 50s
timeout server 50s
timeout tunnel 1h
listen stats :8280
stats uri /
stats show-legends
stats refresh 10s
stats realm Haproxy Statistics
stats auth xxxxxxxxxxxxxxxxxxxxxxx
frontend http
bind :5080
option http-server-close
option forwardfor
use_backend sickbeard if { path_beg /sickbeard }
default_backend sickbeard
frontend https
bind :5443 ssl crt /usr/local/haproxy/var/crt/default.pem
option http-server-close
option forwardfor
rspirep ^Location: http://(.*)$ Location: https://1
use_backend dsm if { hdr_beg(Host) -i dsm. }
use_backend sabnzbd if { hdr_beg(Host) -i sabnzbd. }
use_backend nzbget if { hdr_beg(Host) -i nzbget. }
use_backend sickbeard if { hdr_beg(Host) -i sickbeard. }
use_backend couchpotatoserver if { hdr_beg(Host) -i couchpotatoserver. }
use_backend headphones if { hdr_beg(Host) -i headphones. }
use_backend maraschino if { hdr_beg(Host) -i maraschino. }

il doit y avoir un forward avec le 8280 sur le routeur qui m a echappe non?

Modifié par aurelized
Lien vers le commentaire
Partager sur d’autres sites

Le 8280 est juste une page web affichant les stats, on en a pas besoin dans notre cas (tu peux la visualiser avec ton IP:828)

Sinon la config à l'air bonne.

Tu as bien redirigé le port interne 5080 vers le port externe 80 ?

Ton nom de domaine pointe bien sur ton ip publique ?

Sinon essaye avec http://IP_publique

Essaye aussi avec http:IP_Interne_NAS:5080 pour valider que HAProxy fonctionne bien.

Lien vers le commentaire
Partager sur d’autres sites

en fait sur mon routeur c est linverse, je peux forwarde un port extern vers un interne

donc j ai redirige le port 80 vers le 5080

ca va pas? ( j obtiens une erreur 503 avec ipinterne:5080)

sinon oui la redirection nom de domain ip publique fonctionne parfaitement

Modifié par aurelized
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.


×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.