Forum général.général Apache redirect derriere un proxy.

Posté par  (site web personnel) .
Étiquettes : aucune
0
14
avr.
2008
hello,

J'ai un souci de redirection avec Apache, que je n'arrive pas a résoudre.

Le but est que toute requete vers example.com soit redirigée vers www.example.com.
Le problème est que example.com est derrière un proxy, Apache étant situé sur serveur.com. Je n'ai accès que a la conf du serveur, pas a celle du proxy.

Actuellement, www.example.com et example.com sont tous les deux redirigés vers serveur.com (port 8300) en interne. J'aimerai donc pouvoir faire la différence entre les deux pour demander une redirection si besoin.

ma conf actuelle est:

nameVirtualHost *:8300
< VirtualHost *:8300 >
ServerName www.example.com

RewriteEngine on
RewriteCond {SERVER_NAME} !www\.example\.com$ [NC]
RewriteRule ^/(.*) http://www.example.com/$1 [L,R=301]

[...]


Le souci est que dans SERVER_NAME je n'ai que serveur.com, pas example.com. Je n'ai pas trouvé d'autres variables qui contiennent example.com, pas plus que je n'ai réussi a tricher de façon différente (je pensais a SetEnvIf, puis comparer a cette variable ).

Quelqu'un aurait-il une idée géniale?
Merci pour toute piste
  • # HTTP_HOST ?

    Posté par  . Évalué à 3.

    Vois d'abord si HTTP_HOST ne contiendrait pas le nom du serveur appelé côté client.

    Bon courage.
    • [^] # Re: HTTP_HOST ?

      Posté par  (site web personnel) . Évalué à 2.

      merci pour l'idee, mais j'avais deja tente, et ce n'est pas ca, alors que ca semblait le plus logique.

      Pour info Firefox "has detected that the server is redirecting the request for this address in a way that will never complete.", et les logs d'apache me disent:
      RewriteCond: input='' pattern='!www\.example\.com$' [NC] => matched
      Ce qui n'est donc pas bon, le input n'est pas ce qu'il devrait etre.
      • [^] # Re: HTTP_HOST ?

        Posté par  . Évalué à 3.

        Essaie de mettre un % devant ton bloc {SERVER_NAME} ou {HTTP_HOST}.

        Méfie-toi des inversions de conditions avec le point d'exclamation. Imagine un instant que tes <i>backslashes</i> ne soient pas considérés comme des caractères d'échappement. Cela suffirait à ce que <b>www.example.com</b> soit différent de <b>www\.example\.com</b> et, donc, que ta condition soit toujours remplie, ce qui te ferait entrer dans une boucle infinie, déclenchant le message d'erreur de Firefox.

        C'est pas forcément incorrect pour autant, mais assure-toi que Apache interprète bien ta règle comme tu l'entends. Moi, il a fallu que je bidouille un moment avant que mes règles à moi fonctionnent comme prévu.

        Ensuite, si vraiment tes variables d'environnement ne contiennent pas le nom du serveur appelé, c'est que ton proxy les filtre, voire fait la redirection de lui-même, et dans ce cas il n'y a pas de secret. S'il y a redirection, alors ton serveur Apache ne devrait même pas s'en préoccuper (travail fait en amont). Si c'est une <i>regexp</i> qui dispatche la requête au bon endroit, style <b>.*\.example\.com</b>, alors à défaut de pouvoir corriger la conf', il faut au moins que tu vérifies (ou fasse vérifier) si c'est bien le cas. Ca évitera d'avoir à suer pour rien et -surtout- que ta config' Apache provoque des effets de bord en cas de modification de celle du proxy.
        • [^] # Re: HTTP_HOST ?

          Posté par  (site web personnel) . Évalué à 2.

          Oups, c'est une erreur dans le forum, il y a bien sur un % devant les {VARIABLES}.

          Le proxy ne fait malheureusement pas la redirection lui meme, ce qui serait de loin le plus simple. Je vais essayer de voir ca...

          Merci
  • # ServerAlias

    Posté par  . Évalué à 2.

    Un ServerAlias en plus du ServerName ne conviendrait-il pas ?
    • [^] # Re: ServerAlias

      Posté par  (site web personnel) . Évalué à 2.

      Bien tente, mais non.

      Le site integre un SSO, pour lequel il faut etre sur une page precise. Donc si on est sur example.com/sso c'est refuse, parce que ce n'est pas www.example.com/sso (et je n'ai pas de pouvoir la dessus non plus).

      Merci
  • # Si je ne m'abuse ...

    Posté par  . Évalué à 3.

    Quel reverse proxy utilises tu ?

    J'ai récemment eu des petits soucis avec Apache en reverse proxy...
    mod_proxy fonctionne en HTTP/1.0 de base, donc pas de header host: dans la requête, donc fonctionnement bête et méchant de HTTP/1.0 sans notion de vhost possible.

    Il faut, au niveau du reverse proxy, forcer l'utilisation du HTTP/1.1 et son header host: à coup de:
    ProxyPreserveHost on
    Ensuite, en temps normal, pour transformer du truc.com en www.truc.com, il y pas besoin de se casser la tête, cf la directive UseCanonicalName: http://httpd.apache.org/docs/2.0/mod/core.html#usecanonicaln(...)
    • [^] # Re: Si je ne m'abuse ...

      Posté par  (site web personnel) . Évalué à 2.

      Je n'ai pas acces au proxy... Je ne sais pas trop ce qui est utilise.

      Pour le coup du UseCanonicalName, j'avais bien remarque cette directive, mais ca ne semble pas aider. Elle est a 'on' par defaut, je l'ai passe a 'off' par acquis de conscience, mais rien ne change...
      • [^] # Re: Si je ne m'abuse ...

        Posté par  . Évalué à 2.

        Très franchement, en lisant ça:

        Le souci est que dans SERVER_NAME je n'ai que serveur.com


        Ca me fait très clairement penser au proxy qui renvoit pas le nom de serveur... donc ton problème n'a pas trop trop de solution sans en savoir plus sur ce fameux proxy.

        Sinon, il faudrait que ta directive UseCanonicalName soit à On pour forcer l'utilisation du nom spécifié via la directive ServerName.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.