2 votes

Plusieurs serveurs web derrière une seule IP publique

Je suis un lecteur de longue date et un nouveau posteur. Voici donc mon dilemme. J'héberge 3 sites à la maison pour quelques amis, rien de gros, tous des sites wordpress. Je les exécute dans VMWare Workstation. J'ai une tonne de RAM à revendre et tout ce bazar, donc pas de soucis sur le plan des ressources. Alors que je construis le site # 2, je réalise, 'CRAP !... Comment vais-je les faire passer par le routeur ?" Maintenant, avant que certains d'entre vous ne disent vhosts, je sépare les sites sur différentes VM. 1 sur 3 n'est pas un site très important, mais en cas de problème, je préfère que tous ne tombent pas en même temps. Donc...

J'ai un routeur Linksys générique (avec l'atroce nouveau Smart Wifi). Il faut que je change le firmware pour les bons trucs, mais c'est un autre jour. Donc une IP publique, 3 VM's ayant toutes des IP internes uniques, c'est-à-dire 192..1/2/3. Le routeur n'autorise pas le transfert de port vers plusieurs IP utilisant le même port (80).

S'il y a trop à faire, je vais mordre la balle et les déplacer dans la même VM et héberger les différents sites, mais je pensais utiliser une AUTRE VM. Un routeur virtuel. Je peux penser à certaines VM de routeur/pare-feu comme pfSense, m0n0wall, mais je cherche juste quelque chose de simple et facile à mettre en place, mais je suppose qu'il devra agir un peu comme un serveur virtuel en recevant la demande de port 80 du routeur, puis en dispersant le trafic vers les 3 VM contenant les serveurs web en utilisant les en-têtes d'hôte (je pense).

Quelqu'un a-t-il une suggestion, une meilleure méthode, etc. ? J'apprécie beaucoup par avance, et même si le fait de les mettre tous sous le même toit de VM résoudrait le problème instantanément, dans mon cas, la séparation des VM l'emporte en quelque sorte.

Mais très ouvert aux idées. A la vôtre.

3voto

Configurez un autre vm comme proxy, qui dirigera le trafic vers le vm approprié en utilisant le nom de domaine.

2voto

Faron Points 327

J'ai essayé plusieurs solutions et la meilleure que j'ai trouvée est l'utilisation d'Apache2, qui est livré avec une fonction d'hébergement virtuel.

Vous aurez besoin de faire un peu de "câblage" avec Apache2, mais j'ai inclus ma conf comme guide pour vous. Comment cela fonctionne : Apache2 fonctionne sur la fonctionnalité "Name-Based Domain" où il fait tourner autant de sites que je veux mais sur une seule IP publique. [Je suis un développeur, ce qui explique le nombre de sites.]

   $ sudo apt-get install -y apache2 apache2-dev apache2-threaded-dev

Câbler votre apache2.conf en ajoutant ces trois lignes à la fin du conf

   include httpd.conf
   <VirtualHost *>
   </VirtualHost>

Configurez votre httpd.conf avec ce guide ; ajustez-le en fonction de votre cas. Par défaut, lors d'une nouvelle installation, vous ne verrez pas httpd.conf mais Apache2 répondra s'il trouve httpd.conf dans le répertoire /etc/apache2.

    $ sudo touch /etc/apache2/httpd.conf

et ajoutez ceci à httpd.conf. L'accent est mis sur le fait de laisser :80 intacte. Quand vous voyez ' ## EDIT THIS* C'est là que vous pouvez modifier les données à votre guise, tout en laissant les autres intactes.

   <Directory "/var/www">  ***## EDIT THIS***
      Options Indexes FollowSymLinks
      AllowOverride All
   </Directory>

    <location /cgi-bin>
    AddHandler cgi-script .cgi .pl
    Options -Indexes +FollowSymlinks +ExecCGI
    </location>

  <VirtualHost *:80>
    ServerName example.ca  ***## EDIT THIS***
    ServerAlias www.example.ca ***## EDIT THIS***
    DocumentRoot /var/www/example_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

  <VirtualHost *:80>
    ServerName sample.ca ***## EDIT THIS***
    ServerAlias www.sample.ca ***## EDIT THIS***
    DocumentRoot /var/www/sample_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

alors...

   $ sudo service apache2 restart

et voilà ! Bonne chance !

EDIT : Gardez à l'esprit qu'après avoir configuré les sites et testé leur fonctionnement sur votre réseau local, vous devez mettre à jour les DNS avec votre fournisseur de services DNS (où vous avez enregistré ces domaines) et mettre à jour votre adresse IP (où vous hébergez votre machine avec ces multi-sites).

1voto

LawrenceC Points 70381

Le routeur n'autorise pas le transfert de port vers plusieurs adresses IP utilisant le même port (80).

Ce n'est pas possible avec le TCP/IP standard, d'ailleurs. Vous avez besoin d'un programme, c'est-à-dire d'un proxy, qui accepte les demandes sur le port, examine les demandes et les déplace en conséquence.


Apache et d'autres serveurs web disposent d'une fonction de "reverse proxy" qui peut être utilisée pour "diviser" votre trafic entrant. Un proxy inverse indique à Apache que les requêtes pour un certain chemin web, par exemple "votredomaine/répertoire1", doivent être envoyées à un autre serveur web, et que les réponses de ce serveur web doivent être renvoyées au client d'origine.

Attention, cependant, si vous avez des applications fonctionnant sur ce serveur web (PHP, etc.), vous devrez peut-être modifier leurs paramètres car leur URL externe sera différente. Il se peut que vous deviez indiquer à une application PHP qu'elle vit dans "votredomaine/répertoire1" au lieu de "votredomaine" afin qu'elle puisse générer des liens correctement. Il est possible d'indiquer à Apache de réécrire le trafic provenant du serveur dorsal avant qu'il ne le renvoie au client, mais cela est difficile et vous devez l'éviter si possible. Les applications qui génèrent des liens à l'aide de Javascript peuvent être particulièrement problématiques, et toutes les applications web ne sont donc pas facilement "reverse proxyables".

Installez donc Apache sur une quatrième VM "frontale" et faites suivre votre TCP 80 entrant à cette VM. Vous devez également vous assurer que cette VM peut atteindre vos autres VM sur votre "réseau virtuel". Ensuite, sur votre VM "front-end", vous pouvez configurer un proxy inverse distinct pour chaque site Web.

Aquí est le détail de la configuration pertinente d'Apache, en utilisant l'option ProxyPass y ProxyPassReverse des directives.

Vous pouvez également élaborer et mettre en œuvre la mise en cache, ce qui améliorera les performances.

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