4 votes

Apache Rewrite ou Proxy vers un serveur interne

Tout d'abord, c'est mon premier essai avec Apache, alors pardonnez mon manque d'expérience :)

Ma configuration de base est la suivante : mysub.domain.com est envoyé à mon IP statique via une entrée CNAME dans le gestionnaire DNS de godaddy. Il atteint mon serveur Ubuntu 10 LTS fonctionnant avec Apache2.

Je dispose d'une entrée d'hôte virtuel qui dirige cette demande vers le serveur approprié. /var/www/mysub dossier. Je n'ai pas de contenu dans ce dossier, mais j'ai ajouté une ligne à la page "Ça marche" pour savoir si j'y suis arrivé avec succès. J'ai également un Mac Mini qui fait tourner un serveur wiki sur le même réseau local que le serveur Ubuntu.

J'aimerais mysub.domain.com de toucher mon serveur Mini au lieu du serveur /var/www/mysub dossier.

Après de nombreuses lectures sur ce site et d'autres, j'ai réussi à le faire... en quelque sorte.

J'ai ce qui suit dans mon /var/www/mysub/.htacess que j'ai trouvé dans une autre question de SF (j'ai oublié de copier le lien).

RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysub.domain.com/*
RewriteRule .* http://192.168.x.x/ [P,L]

Cela fonctionne dans la mesure où il y a redirection mysub.domain.com sur la page d'accueil du Mini. Mais bien sûr, il en va de même pour chaque clic de lien ultérieur sur la page Mini. Je crois comprendre pourquoi (tout ce qui commence par mysub.domain.com est dirigé vers ce qui est essentiellement la page d'accueil du serveur wiki, et comme les liens suivants sur le serveur wiki incluent également le mot mysub.domain.com il se retrouve toujours au même endroit)

Je ne sais pas ce qu'il faut faire de différent. Pour être tout à fait honnête, je ne comprends pas la syntaxe de ces lignes Rewrite.


J'ai vu d'innombrables exemples d'entrées de configuration et j'en ai essayé quelques-unes, mais sans vraiment comprendre la syntaxe, c'est une sorte de tir dans le noir.

Le présent était un billet utile, et après avoir lu este J'ai essayé d'ajouter ceci à mon /apache2/httpd.conf archivo

<Location />
   ProxyPass http://192.168.x.x
   ProxyPassReverse http://192.168.x.x
</Location>

Pas de chance.

Il est clair que j'ai des choses à apprendre, mais il me semble que ce que je veux faire est probablement très simple. Que me manque-t-il ?


MODIFIER SELON LES COMMENTAIRES

Mon /etc/apache2/httpd.conf archivo

ServerName localhost

<VirtualHost *:80>
   ServerName domain.com
   ServerAlias www.domain.com
   DocumentRoot /var/www/domain
</VirtualHost>

<VirtualHost *:80>
   ServerName mysub.domain.com
   DocumentRoot /var/www/mysub
   <Location />
      ProxyPass http://192.168.x.x/
      ProxyPassReverse http://192.168.x.x/
   </Location>
</VirtualHost>

... et mon sites-available/mysub fichier...

<VirtualHost *:80>
        ServerAdmin me@domain.com
        ServerName mysub.domain.com
        DocumentRoot /var/www/mysub

        #ProxyRequests Off
        <Location />
                ProxyPass http://192.168.1.50/
                ProxyPassReverse http://192.168.1.50/
        </Location>
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/mysub>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/www/mysub/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

Sortie de apache2ctl -S

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server 66-152-109-110.tvc-ip.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost 66-152-109-110.tvc-ip.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
         port 80 namevhost mysub.domain.com (/etc/apache2/sites-enabled/mysub:1)
Syntax OK

4voto

Shane Madden Points 112034

Vous êtes tout près du but !

Quelques remarques :

  • RewriteCond %{HTTP_HOST} ^mysub.domain.com/* - Les HTTP_HOST ne contient que des mysub.domain.com mais pas le reste du chemin.

    Cette règle correspond en fait, mais accidentellement - il n'y a pas de / mais le caractère * s'applique au / qui signifie "répéter le / 0 à l'infini".

    Apache utilise des expressions rationnelles compatibles avec perl - pour trouver l'hôte exact, cela devrait ressembler à ceci :

    RewriteCond %{HTTP_HOST} ^mysub\.domain\.com$
  • RewriteRule .* http://192.168.x.x/ [P,L] - Ceci ne charge que la page d'accueil car il n'inclut pas le reste du chemin passé - ceci doit être fait manuellement lors de l'utilisation de l'option [P] drapeau de RewriteRule .

    Cela devrait fonctionner :

    RewriteRule (.*) http://192.168.x.x/$1 [P,L]
  • En ProxyPass est presque correcte, sauf qu'elle est remplacée par la configuration de l'élément .htaccess il n'est donc pas utilisé. L'utilisation .htaccess est mauvais pour les performances et potentiellement problématique pour la sécurité - voir la recommandation dans la documentation d'Apache aquí .

    La meilleure solution consiste probablement à supprimer le fichier .htaccess et d'utiliser simplement ProxyPass . Modifiez légèrement votre configuration...

    <Location />
       ProxyPass http://192.168.x.x/
       ProxyPassReverse http://192.168.x.x/
    </Location>

    ...et le déplacer de votre httpd.conf à l'intérieur de la <VirtualHost> qui dessert le sous-domaine.

    Avec les barres obliques correspondantes et pas plus .htaccess Cela devrait faire l'affaire !

0voto

Jahanzeb Farooq Points 598

C'était la dernière pièce du puzzle. J'ai trouvé la réponse sur le site este question.

La solution est d'avoir ceci dans /etc/apache2/mods-enabled/proxy.conf :

<IfModule mod_proxy.c>
ProxyRequests Off
<Proxy *>
  AddDefaultCharset off 
  Order deny,allow
  Allow from all 
</Proxy>

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X