IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Redirection http -> https et vice-versa en VirtualHost


Sujet :

Apache

  1. #1
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut Redirection http -> https et vice-versa en VirtualHost
    bonjour,
    J'ai une machine avec une seule adresse IP.
    J'ai déclaré dessus 3 virtual hosts pour 3 serveurs (intranet, svn et wiki).
    J'ai un fichier apache2.conf qui déclare :
    NameVirtualHost xxx.xx.xx.xx:80
    NameVirtualHost xxx.xx.xx.xx:443
    puis un Include des fichiers de config des machines virtuelles.
    J'ai donc 3 fichiers de config de machines virtuelles, grosso modo :

    INTRANET :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <VirtualHost xxx.xx.xx.xx:80>
    ServerName intranet.local
    ....
    </VirtualHost>
    WIKI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <VirtualHost xxx.xx.xx.xx:80>
    ServerName wiki.local
    ....
    </VirtualHost>
    SVN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <VirtualHost xxx.xx.xx.xx:443>
    ServerName svn.local
    ....
    </VirtualHost>
    Dans mon navigateur :
    http://intranet.local -> OK
    http://wiki.local -> OK
    https://svn.local -> OK

    MAIS :

    https://intranet.local -> affiche la page du serveur svn
    https://wiki.local -> affiche la page du serveur svn
    http://svn.local -> affiche la page intranet

    Comment spécifier que si le protocole https est demandé pour autre chose que le serveur svn, de ne pas l'afficher ?
    idem pour le http sur le serveur svn...

    merci

  2. #2
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    Hop je me réponds, il suffit d'ajouter un virtual host pour l'URL/port que l'on souhaite squizzer et y mettre une clause Redirect sur la bonne adresse.
    Par exemple pour :

    SVN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <VirtualHost xxx.xx.xx.xx:443>
    ServerName svn.local
    ....
    </VirtualHost>
    je dois ajouter un Virtual Host :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <VirtualHost xxx.xx.xx.xx:80>
    ServerName svn.local
    Redirect / <a href="https://svn.local" target="_blank">https://svn.local</a>
    ....
    </VirtualHost>

  3. #3
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    Bon, pas résolu...
    Cela fonctionne pour le svn mais si j'ajoute les mêmes directives pour l'intranet et le wiki, plus aucune redirection ne fonctionne...
    Si je mets https pour un site seulement en http j'ai le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Échec de la connexion sécurisée
    Une erreur est survenue pendant une connexion à intranet.pharnext.lan.
    SSL a reçu un enregistrement qui dépasse la longueur maximale autorisée.
    (Code d'erreur : ssl_error_rx_record_too_long)
    alors que je voulais une redirection vers http...
    Et la redirection http->https fonctionne encore pour le svn mais j'ai le même message que ci-dessus...

    Autre point :
    si je laisse la directive Redirect uniquement pour svn, cela marche si je demande la page racine :
    http://svn.local me donne bien une redirection vers https://svn.local
    MAIS
    http://svn.local/Projet1/trunk -> https://svn.localprojet1/trunk
    Donc non seulement il ne mets pas le / entre "local" et "Projet1" mais en plus il mets la première lettre de Projet1 en minuscule...
    Bon, je cherche à faire une expression régulière du genre :
    Redirect /(.*)$ https://svn.local/$1
    a ce moemnt là, la redirection ne se fait plus :
    http://svn.local/Projet1/trunk/ -> http://svn.local/Projet1/trunk/
    et le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Not Found
    The requested URL /Projet1/trunk/ was not found on this server.
    Là, je sèche...

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Déjà, il faut savoir que tu ne peux avoir qu'un seul VH SSL sur un seul port. Par exemple, si tu veux avoir https://intranet.local/, https://wiki.local/ et https://svn.local/ pointant sur 3 VH différents, ce n'est pas possible car ces 3 VH utilisent le même port (443) en SSL. Pour bien fonctionner, il faudrait que les noms wiki... intranet... et svn... pointent sur 3 IP différentes ou bien que tu utilises différents ports (https://intranet.local:123/, https://wiki.local:456/ et https://svn.local:789/ par exemple). Ce n'est visiblement pas ton besoin mais je le dis au cas où.

    Si on revient à ton problème, une façon simple de t'en sortir consiste à utiliser mod_rewrite et les conditions. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <VirtualHost xxx.xx.xx.xx:80>
    ServerName intranet.local
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^intranet.local$
    RewriteRule (.*) https://%{HTTP_HOST}$1 [R]
    ....
    </VirtualHost>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <VirtualHost xxx.xx.xx.xx:80>
    ServerName wiki.local
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^wiki.local$
    RewriteRule (.*) https://%{HTTP_HOST}$1 [R]
    ....
    </VirtualHost>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <VirtualHost xxx.xx.xx.xx:443>
    ServerName svn.local
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^svn\.local$
    RewriteRule (.*) http://%{HTTP_HOST}$1 [R]
    ....
    </VirtualHost>
    En gros, je vérifie pour chaque VH que le nom demandé est bien celui du VH et si ce n'est pas le cas, je redirige sur https ou http (selon que le VH est prévu pour http ou https).

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    ok, merci bien pour ta réponse, cela marche mais pas tout à fait comme tu me l'as décris donc j'ai un peu réarrangé...
    Dans ton exemple, pour SVN, il écoute sur 443.
    Si je demande dans le navigateur http://svn.local, je ne vois pas ce que fais ta règle...???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <VirtualHost xxx.xx.xx.xx:443>
    ServerName svn.local
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^svn\.local$
    RewriteRule (.*) http://%{HTTP_HOST}$1 [R]
    ....
    </VirtualHost>
    En fait j'ai ajouté (en plus du VH SVN 443) un VirtualHost SVN sur le port 80, qui redirige vers https. J'ai même pu supprimer la RewriteCond :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <VirtualHost xxx.xx.xx.xx:80>
            ServerName svn.local
            RewriteEngine on
            RewriteRule (.*) https://%{HTTP_HOST}$1 [R]
    </VirtualHost>
    Si la requête vient de https://svn.local, c'est le VH SVN 443 qui prends la main, de la bonne manière avec gestion des authentification -> OK
    Si la requête viens de http://svn.local c'est le VH SVN 80 qui prends la main, qui réécris l'adresse en remplacant http par https...
    Ca marche très bien.
    Merci pour la bonne piste !!!
    Je vais tester le wiki et l'intranet de la même manière...

  6. #6
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    bon cette solution ne marche pas pour le port 80 du wiki

    J'ai essayé d'ajouter un VH 443 WIKI qui redirige vers http :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <VirtualHost xxx.xx.xx.xx:443>
            ServerName wiki.local
            RewriteEngine on
            RewriteCond %{HTTP_HOST} ^wiki\.local$
            RewriteRule (.*) http://%{HTTP_HOST}$1 [R]
    </VirtualHost>
    Mais cela ne fonctionne pas : la page en http://wiki.local fonctionne mais la demande https://wiki.local reste en https, le RewriteRule n'a pas l'air de fonctionner et comme c'est du https il me fait un échec de connexion : "Code d'erreur : ssl_error_rx_record_too_long"

  7. #7
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    Bon et bien c'est résolu, toujours grâce à Mac...
    J'ai rajouté une règle sur le port 80 :
    si c'est http://svn.local on redirige donc vers https://svn.local :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <VirtualHost xxx.xx.xx.xx:80>
            RewriteEngine on
            RewriteCond %{HTTP_HOST} ^svn\.local$
            RewriteRule (.*) https://%{HTTP_HOST}$1 [R]
    </VirtualHost>
    Et j'ai ajouté une règle sur le port 443 :
    si c'est autre chose que svn, on redirige vers http

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <VirtualHost xxx.xx.xx.xx:443>
            ServerName svn.local
            RewriteEngine on
            RewriteCond %{HTTP_HOST} !^svn\.local$
            RewriteRule (.*) http://%{HTTP_HOST}$1 [R]
    </VirtualHost>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/08/2008, 17h03
  2. Redirection http vers https
    Par valou7518 dans le forum Apache
    Réponses: 1
    Dernier message: 13/12/2006, 16h59
  3. redirection http://site => https://site
    Par FiSh MoOn dans le forum Apache
    Réponses: 6
    Dernier message: 27/03/2006, 17h34
  4. Redirection page http en https
    Par krina dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 03/01/2006, 16h35
  5. [Sécurité] Rédirection pages Http en Https
    Par krina dans le forum Langage
    Réponses: 6
    Dernier message: 03/01/2006, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo