Aller au contenu

Espace Web Personnel


Messages recommandés

Hébergement mutualisé. Pour des raisons de sécurité j'ai décidé de permettre aux utilisateurs de créer leur site web à partir du dossier www dans home. Le principe ressemble à celui d'un hebergement mutualisé, je vous l'accorde. Seulement impossible de mettre la main sur la redirection des domaines vers l'espace perso des utilisateurs.

Exemple:

Contenu du dossier www de l'utilisateur user:

index.php
--------------------------------------------
<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <title>Essai</title>
</head>
<body>
Ma page d'accueil
</body>
Je tape sur ma barre URL: http://domaine-du-nas.fr/~user

Résultat:

Ma page d'accueil
Bon jusque la tout va bien. Mais imaginons que cet utilisateur est un nom de domaine chez OVH http://domaine-user.fr et qu'il ait envie de pouvoir accéder à http://domaine-du-nas.fr/~user via son propre domaine. Comme je dois faire pour lui permettre ça ?

Exemple:

Appel de la page http://domaine-user.fr :

Résultat:

Ma page d'accueil
Merci pour votre aide ! Modifié par heavydev
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Hello !

Je relève car ce besoin est fort de mon côté. Moi, je cherche à faire un site web pour mon association. Cette-dernière a un nom de domaine et je souhaite évidemment qu'il apparaisse sans mon domine perso.

Chez OVH, j'ai créé le champ A avec une redirection vers l'IP du NAS. Du coup http://domaine2.compointe vers le NAS comme http://domaine1.net .

C'est cool, mais je suis bloqué à cette étape. Puis-je utiliser HAproxy pour remédier à cela ?

Ah et :

... ne fonctionne pas pour moi...

Merci pour votre aide !! ;)

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

je ne vais pas pouvoir répondre en détail (fatigué), mais une solution à votre problème est d'utiliser un reverse proxy (nginx/haproxy/varnish/squid/apache/... ).

Il y a de nombreux posts sur ce sujet dans le forum.

On peut faire autrement, mais c'est souvent le plus simple.

Lien vers le commentaire
Partager sur d’autres sites

je ne vais pas pouvoir répondre en détail (fatigué), mais une solution à votre problème est d'utiliser un reverse proxy (nginx/haproxy/varnish/squid/apache/... ).

Il y a de nombreux posts sur ce sujet dans le forum.

On peut faire autrement, mais c'est souvent le plus simple.

​Hello Fenrir !

Merci pour ton retour ;-)

En effet, je tente d'utiliser HAProxy que je pratique d'ores et déjà mais là les arguments me paraissent complexes. Je patauge pas mal d'où ma demande...

J'ai essayé plusieurs choses côté "Frontends" et "Backends" mais sans succès pour l'heure...

Lien vers le commentaire
Partager sur d’autres sites

j'ai fait un petit test vite fait avec le paquet haproxy du syno :

Pour le test j'ai créé 3 dossiers (user1, user2 et user3) dans le partage web, mais ça devrait fonctionner de la même manière avec les ~login

La conf suivante devrait de donner les bases :

frontend test
        bind :5081
        option http-server-close
        option forwardfor
        acl url_tag1 path_beg /site1
        acl url_tag2 path_beg /site2
        use_backend site1 { if url_tag1 }
        use_backend site2 { if url_tag2 }
        use_backend site3 { if hdr(Host) -i tondomain.org }
        default_backend web

backend site1
        reqirep ^([^\ :]*)\ /site1/(.*)     \1\ /user1/\2
        server site1 localhost:80 check

backend site2
        reqirep ^([^\ :]*)\ /site2/(.*)     \1\ /user2/\2
        server site2 localhost:80 check

backend site3
        server site3 localhost:80 check

(la regexp est à affiner, elle ne match pas les url sans le / de fin)

Après tu peux combiner mes exemples.

Lien vers le commentaire
Partager sur d’autres sites

j'ai fait un petit test vite fait avec le paquet haproxy du syno :

Pour le test j'ai créé 3 dossiers (user1, user2 et user3) dans le partage web, mais ça devrait fonctionner de la même manière avec les ~login

La conf suivante devrait de donner les bases :

frontend test
        bind :5081
        option http-server-close
        option forwardfor
        acl url_tag1 path_beg /site1
        acl url_tag2 path_beg /site2
        use_backend site1 { if url_tag1 }
        use_backend site2 { if url_tag2 }
        use_backend site3 { if hdr(Host) -i tondomain.org }
        default_backend web

backend site1
        reqirep ^([^\ :]*)\ /site1/(.*)     \1\ /user1/\2
        server site1 localhost:80 check

backend site2
        reqirep ^([^\ :]*)\ /site2/(.*)     \1\ /user2/\2
        server site2 localhost:80 check

backend site3
        server site3 localhost:80 check

(la regexp est à affiner, elle ne match pas les url sans le / de fin)

Après tu peux combiner mes exemples.

Re !

 

Milles mercis pour ces infos.

Je me suis lancé dedans même si je galère pas mal pour l'heure. Dans ton exemple, tu es délibérément passé au port 5081 ?

Je suis en effet dans le cas ~login. J’essaye d'arriver à ça : www.domaineduuser.com .

 

Je reviendrai si je peine trop (c'est quelque peu Rock'N'Roll quand même ;-) ).

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

​Je me suis lancé dedans même si je galère pas mal pour l'heure. Dans ton exemple, tu es délibérément passé au port 5081 ?

​Oui, j'ai choisi un port non utilisé pour partir d'un "profil" vierge

​Je suis en effet dans le cas ~login. J’essaye d'arriver à ça : www.domaineduuser.com .

​Ajoute une expression régulière dans site3 pour rediriger la racine (/) vers /~login

Lien vers le commentaire
Partager sur d’autres sites

Re ! Merci pour tous ces conseils mais ça ne matche toujours pas... V'là où j'en suis :

Frontends

Nom : http

Binds : :5080

Backend par défaut : dsm

Options : option http-server-close,option forwardfor,use_backend user { if hdr(Host) -i domaineduuser.com }

 

Backends

Nom : user

Serveurs : www localhost:80/~user check

Options : Néant

 

 Associations

Frontend : http

Backend : user

Conditions : if { hdr_beg(Host) -i www. }

On parle bien du dossier "www" dans le "home" du user (celui créé par DSM quand on active l'option site web personnel) ?

Il y a clairement une logique qui m'échappe...  :mellow:

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

Il faut que tu modifie l'url envoyé par haproxy à apache :

Frontend

  • Name: test
  • Binds: :5081
  • Default Backend: web
  • Options: option http-server-close,option forwardfor

Backend

  • Name: fenrir
  • Servers: fenrir localhost:80 check
  • Options: reqrep ^([^\ :]*)\ /(.*)     \1\ /~fenrir/\2

Associations

  • Frontend: test
  • Backend: fenrir
  • Condition: if { hdr_beg(Host) -i toto. }

http://toto.mondomaine.org:5081/  affiche la même chose que http://monnas/~fenrir/

http://toto.mondomaine.org:5081/test/  affiche la même chose que http://monnas/~fenrir/test/

Je ne connais pas haproxy (habituellement je fais ce genre de chose avec nginx, varnish ou du F5), il y a surement d'autres choses à faire, par exemple http://toto.mondomaine.org:5081/test (sans / de fin) qui ne fonctionne pas (c'est la faute d'apache), ça devrait être faisable d'après la doc :

Example: send redirects for request for articles without a '/'.
        acl missing_slash path_reg ^/article/[^/]*$
        redirect code 301 prefix / drop-query append-slash if missing_slash

Je te recommande de vérifier le fichier de configuration généré par l'interface

ps | grep haproxy

=> /usr/local/haproxy/var/haproxy.cfg

Lien vers le commentaire
Partager sur d’autres sites

Re !

 

Bon, je sens que j'approche au but mais ce n'est pas encore ça. Je ne comprends pas:

1. comment faire du dossier "www" la cible de mon intention ?

2. comment HAProxy comprends le domaine de l'user ?

 

Mon /usr/local/haproxy/var/haproxy.cfg :

lobal
    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 ******:*********

frontend http
    bind :5080
    option http-server-close
    option forwardfor
    use_backend dsm if { hdr_beg(Host) -i dsm. }
    use_backend gateone if { hdr_beg(Host) -i gateone. }
    use_backend webdav if { hdr_beg(Host) -i webdav. }
    use_backend audio if { hdr_beg(Host) -i audio. }
    use_backend download if { hdr_beg(Host) -i download. }
    use_backend video if { hdr_beg(Host) -i video. }
    use_backend file if { hdr_beg(Host) -i file. }
    use_backend haproxy if { hdr_beg(Host) -i haproxy. }
    use_backend photo if { path_beg /photo }
    use_backend prod if { hdr_beg(Host) -i prod. }
    use_backend www if { hdr_beg(Host) -i www. }
    use_backend phpMyAdmin if { hdr_beg(Host) -i pma. }
    use_backend mail if { path_beg /mail }
    use_backend blog if { path_beg /blog }
    use_backend webalizer if { path_beg /webalizer }
    use_backend tp if { hdr_beg(Host) -i tp. }
    use_backend baikal if { hdr_beg(Host) -i baikal. }
    use_backend freebox if { hdr_beg(Host) -i freebox. }
    use_backend sickbeard if { hdr_beg(Host) -i sickbeard. }
    use_backend sabnzbd if { hdr_beg(Host) -i sabnzbd. }
    use_backend couchpotato if { hdr_beg(Host) -i couch. }
    use_backend transmission if { hdr_beg(Host) -i transmission. }
    use_backend headphones if { hdr_beg(Host) -i headphones. }
    use_backend user if { hdr_beg(Host) -i user. }
    default_backend dsm

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 gateone if { hdr_beg(Host) -i gateone. }
    use_backend webdav if { hdr_beg(Host) -i webdav. }
    use_backend audio if { hdr_beg(Host) -i audio. }
    use_backend download if { hdr_beg(Host) -i download. }
    use_backend video if { hdr_beg(Host) -i video. }
    use_backend file if { hdr_beg(Host) -i file. }
    use_backend haproxy if { hdr_beg(Host) -i haproxy. }
    use_backend photo if { path_beg /photo }
    use_backend phpMyAdmin if { hdr_beg(Host) -i pma. }
    use_backend mail if { path_beg /mail }
    use_backend blog if { path_beg /blog }
    use_backend webalizer if { path_beg /webalizer }
    use_backend baikal if { hdr_beg(Host) -i baikal. }
    use_backend sickbeard if { hdr_beg(Host) -i sickbeard. }
    use_backend sabnzbd if { hdr_beg(Host) -i sabnzbd. }
    use_backend couchpotato if { hdr_beg(Host) -i couch. }
    use_backend transmission if { hdr_beg(Host) -i transmission. }
    use_backend headphones if { hdr_beg(Host) -i headphones. }
    default_backend dsm

backend web
    server web localhost:80 check

backend dsm
    server dsm localhost:5000 check

backend gateone
    server gateone localhost:8271 ssl verify none check

backend webdav
    server webdav localhost:5005 check

backend audio
    server audio localhost:8800 check

backend download
    server download localhost:8000 check

backend video
    server video localhost:9007 check

backend file
    server file localhost:7000 check

backend haproxy
    server haproxy localhost:8280 check

backend photo
    server photo localhost:80

backend prod
    server prod localhost:80

backend www
    server www localhost:80

backend phpMyAdmin
    server phpMyAdmin localhost:80

backend mail
    server mail localhost:80

backend blog
    server blog localhost:80

backend webalizer
    server webalizer localhost:80

backend tp
    server tp localhost:80

backend baikal
    server baikal localhost:80

backend freebox
    server freebox 192.168.0.254:80

backend sickbeard
    server sickbeard localhost:8083 check

backend sabnzbd
    server sabnzbd localhost:8080 check

backend couchpotato
    server couchpotato localhost:5053

backend transmission
    server transmission localhost:9091 check

backend headphones
    server headphones localhost:8182

backend siteduuser
    reqrep ^([^\ :]*)\ /(.*)     \1\ /~user/\2
    server user localhost:80 check

Et pour ma part, ce n'est pas http://monnas/~user/ qui fonctionne mais http://www.monnas/~user ??

Et j'ajoute que si j'utilise HAProxy c'est pour son interface simplifiée. Le monde des proxy est quand même nébuleux ;-)

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

  1. http://tonnas/~tonlogin correspond au dossier \\tonnas\tonlogin\www de ton nas pour Apache, le serveur web qui écoute sur le port http (80) de ton nas, c'est automatique
  2. dans le frontend, "use_backend nom_du_backend if { hdr_beg(Host) -i user. }" indique d'utiliser le backend [nom_du_backend] si le nom de domaine commence par user. (avec le . )

Donc http://user.truc:5081/, http://user.www.truc.com:5081/ et http://user.truc.com:5081/ seront pris en compte.

Dans ta conf, tu n'as aucun backend nommé user (nom_du_backend dans mon exemple).

De plus, le port est important, haproxy n'écoute pas sur le port http (80) mais sur le port 5080, en local tu dois donc faire tes tests en précisant le port. Tu pourras le masquer après en faisant de la redirection de port.

Enfin, je te recommande de créer ton propre frontend pour ne pas avoir d'interactions avec la conf par défaut (dit autrement, utilise exactement mon exemple, il fonctionne).

Frontend

  • Name: nom_du_frontend
  • Binds: :5081
  • Options: option http-server-close,option forwardfor

Backend

  • Name: nom_du_backend
  • Servers: nom_du_site localhost:80 check
  • Options: reqrep ^([^\ :]*)\ /(.*)     \1\ /~fenrir/\2

Associations

  • Frontend: nom_du_frontend
  • Backend: nom_du_backend
  • Condition: if { hdr_beg(Host) -i toto. }

nom_du_frontend, nom_du_backend et nom_du_site sont simplement des noms d'objets dans la configuration

 

Tous les proxy (inverse ou non) fonctionnent de la même manière :

  1. ils écoutent sur un port (5081 dans mon exemple)
  2. ils lisent les demandes des clients : par exemple une demande de page web http://fenrir.mon.domain:5081/dossier/test.php
  3. ils appliquent éventuellement des règles de transformation : ajout de l'entête "HTTP_X_FORWARDED_FOR" par exemple, réécriture de "/" en "/~fenrir/", ...
  4. ils test des conditions pour choisir le backend à utiliser : si le nom de domaine commence par user alors va là, sinon va ici
  5. ils envoient la requête transformée au(x) backend : donne moi http://localhost/~fenrir/dossier/test.php
  6. ils modifient éventuellement la réponse
  7. ils enregistre éventuellement le résultat en cache
  8. ils envoient la réponse modifiée au client
Lien vers le commentaire
Partager sur d’autres sites

Toutes ces informations sont une mine d'or, merci Fenrir ;-)

Ce qui me perturbe, c'est que dans mon cas user et domaineduuser sont presque les mêmes. Par exemple :

user = super

domaine = supertruc.com

J'ai suivi ton conseil de passer le frontend en 5081 et je l'ai d'ailleurs appelé super.

Dans ton exemple "toto" c'est le nom de l'utilisateur ou celui du dossier dans lequel se trouve le site de utilisateur (\homes\super\www) ?

 

Je continue mes tests !

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

J'ai suivi scrupuleusement tes indications et je crois que ma config' est bonne mais toujours sans succès...

 

Ici le user c'est super et le domaine du user c'est supertruc.com .

Frontend

  • Name: super
  • Binds: :5081
  • Options: option http-server-close,option forwardfor

Backend

  • Name: super
  • Servers: super localhost:80 check
  • Options: reqrep ^([^\ :]*)\ /(.*)     \1\ /~super/\2

Associations

  • Frontend: super
  • Backend: super
  • Condition: if { hdr_beg(Host) -i supertruc.com. }

Et www.supertruc.com:5081/ ne veut toujours pas... Il n'y a pas de différence entre le "www" de utilisateur principal (moi) et le "www" de l'utilisateur secondaire ?

Lien vers le commentaire
Partager sur d’autres sites

if { hdr_beg(Host) -i supertruc.com. } <=> si le nom de machine commence par supertruc.com

donc www.supertruc.com ne correspond pas

 

à tout hasard, tu as bien modifié ton dns (ou le fichier hosts de ton poste) pour que supertruc.com et/ou www.supertruc.com pointe(nt) sur ton nas ?

Lien vers le commentaire
Partager sur d’autres sites

pour les utilisateurs situés en dehors de ton réseau, ça devrait être bon, mais pas pour ceux situés dans ton réseau (sauf si ta box fait du loopback)

Pour faire simple :

modifie le fichier hosts de ton ordi (/etc/hosts ou c:\windows\system32\drivers\etc\hosts) en ajoutant ces 2 lignes :

  • ip.privée.du.nas supertruc.com
  • ip.privée.du.nas www.supertruc.com
Lien vers le commentaire
Partager sur d’autres sites

Bon, il semble que les choses commencent à être OK.

 

J'ai dû mettre super en backend par défaut et maintenant que ce soit www.supertruc.com:5081 ou supertruc.com:5081 je tombe sur le site de l’utilisateur (ce qui est en soit une avancée malgré le fait qu'il perde l'accès simplifié au DSM). J'y suis presque ;-)

 

Côté redirection de port, j'ai un peu de mal à piger, j'ai déjà redirigé le "80" vers le "5080". Il faudrait que je route le "5081" vers le "5080" ?

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

si ça marche depuis ton lan sans toucher à ton fichier hosts, c'est probablement que ton routeur gère le loopback

pour la redirection, oui ou non, ça dépend des services que tu veux rendre accessible sur le port "80".

j'ai utilisé le port 5081 pour être certain de ne pas avoir d'interaction avec la conf par défaut et donc pouvoir tester tranquillement.

si tu souhaite utiliser les redirections de la conf par défaut, 2 solutions :

  • tu ajoute les règles dont tu as besoin dans la conf en 5081 et tu forward le port "80 vers le port 5081 (donc rien vers 5080)
  • ou tu ajoute tes règles à la conf par défaut et tu forward le port "80 vers le port 5080 (donc rien vers 5081)
Lien vers le commentaire
Partager sur d’autres sites

Re ! Côté routeur je suis sous une Freebox V6 ;-)

 

Vu que toute ma config' fonctionne actuellement sur le port "5080", je préfère continuer à utiliser celui-là.

Seulement, le fait de repasser au 5080 change mon backend par défaut de "super" à "dsm" (backend que j'ai configuré pour moi pour le coup). Et je n'accède plus à "www.supertruc.com" ni même au DSM via "supertruc.com". Par contre supertruc.com:5080 fonctionne et m'amène au DSM...

(Je précise que j'ai bien une redirection du pour "80" vers le "5080" sur le routeur)

C'est cornélien cette affaire... Je continue mes tests pour trouver la solution idéale...

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.