Comment avoir 2 serveurs web sur 1 seul serveur physique ?

Bonjour,

est-il possible sous Ubuntu (en théorie la problématique est identique quelque soit la distribution) d’avoir un serveur web apache sur le port 80 et un autre serveur logiciel (autre qu’apache) sur le même port ?

Sur la même IP c’est à priori impossible, sauf peut-être en passant par le module proxy apache ?

Est-ce possible en créant plusieurs adresses IP (eth0 eth0:1 eth0:2 …) de lancer chaque serveur sur une IP distinct (et donc sur IP1:80 et IP2:80) ?

Merci de me guider vers des ressources qui expliquerai celà, ou bien de préciser ici la solution si elle existe :wink:
Edité le 27/05/2009 à 23:30

Interface réseau, ça correspond à l’ensemble eth0 ou bien eth0, eth0:1 et eth0:2 sont 3 interfaces différentes ? A priori je peux restreindre apache à écouter une IP, il faut que je trouve l’équivalent pour l’autre serveur web…

Si je fais fausse route, merci de me l’indiquer.

tant que ton couple IP/Port est unique y’a aucun soucis. Donc pour utiliser deux fois le même port sur une même machine faut utiliser deux ip différentes.
N’importe quel serveur permet de configurer l’IP et le port en écoute de son choix

Merci, j’ai pu lancer 2 serveurs web sur 2 IP différentes sur le port 80 avec une seule machine… Je me demande si on peut faire de même sous windows ?

oui on peut

Y’a plus simple : on utilise des “virtualhost”.
Ca permet d’avoir un seul apache sur une seule ip et pouvoir heberger plusieurs sites web. La differenciation se fait sur le domaine.
Les virtualhosts peuvent aussi etre utilises avec plusieurs IP sur la meme machine.
C’est beaucoup mieux car tu as une seul instance d’apache a installer et a gerer. En plus, tu peux appliquer des directives specifiques a chaque virtualhost exactement comme si c’etait un serveur independant. Meme les directives PHP peuvent etre specifiques a un virtualhost. C’est tres puissant.

Generalement, quand on veut utiliser un autre serveur web (ou un serveur d’application comme tomcat) avec apache, le mieux est d’utiliser apache comme frontend. On fait un virtualhost qui fait office de reverse proxy transparent pour le second serveur qui ecoute sur un autre port.
Ainsi on beneficie de l’extreme souplesse d’apache et des focntionnalites specifiques de l’autre serveur.
Edité le 28/05/2009 à 13:23

En fait je pense qu’il est dans un cas similaire : Apache + autre serveur spécifique. Et oui il est plus intéressant à mon sens de passer par un front d’Apache. Sachant que, puisque tu prend l’exemple de Tomcat, l’avantage se situe aussi sur le fait que Apache est bien plus performant pour servir les contenus statiques. En gros, si tu a une webapp, il est plus performant de déployer images et autres fichiers js sur Apache et tes war sur Tomcat.

En fait je suis en train de regarder la mise en place d’Avantfax (sur apache + php5 avec hylafax) et le serveur web d’OpenERP…

Ce dernier est par défaut sur le port 8080, mais ne voulant pas indiquer le port dans l’URL, je veux passer par le port 80…

J’avais à priori 2 solutions, apache avec le mod proxy et virtualhost (je ne connais pas le mod proxy, et j’ai lu, peut-être dans un cas spécifique je ne me rappelle plus, que c’était une solution pas optimum car il n’y aurai qu’une requête simultanée entre apache et l’autre serveur), et la solution qui marche bien à savoir 2 IP différentes grâce à une interface virtuelle (eth0 et eth0:1).

Le mod proxy d’apache marche peut-être bien, mais je ne pense pas que ça puisse marché mieux que chacun de son côté non ? Apache ne pourra pas rendre plus rapide la réponse de l’autre serveur… Je ne comprend pas comment mettre apache en proxy rend la solution plus souple, on est forcément bridée par le second serveur non ? (tout dépend peut-être du type de serveur, pour etiny (le serveur web d’OpenERP) le serveur semble être une appli en python sans qu’on ai plus d’info là dessus…

En tout cas pour le moment je suis satisfait de cette solution, mais si vous avez mieux à proposer, je suis tout disposer à apprendre :wink:

Ah OK
Je comprends mieux. En fait ce sont 2 applis totalement independantes mais qui ecoutent sur le meme port que tu veux faire cohabiter.
Effectivement, la meilleure solution est bien de creer une interface virtuelle avec une seconde IP.
C’est le plus propre.

Le principe de placer Apache en front est tres indique avec les serveurs d’applications comme tomcat ou jboss mais parce qu’il y a un vrai lien intime entre eux (d’ailleurs Appache possede un module tomcat specifique)

Bof non pas d’accord. Ou situe tu la limite du lien entre Apache et une autre application ? Si ton tomcat ne fait qu’exposer des webservices, le lien est il toujours aussi fort ? Et si ces webservices ne sont finalement exposés que par un ESB ?

Pour ma part, si une machine possède plusieurs IPs, c’est pour utiliser des réseaux différents. Sur un réseau, je préfère centraliser sur un point d’entrée qui dispatch. Ca c’est au niveau de la machine. Après, utiliser des URLs différentes pour éviter le port forwarding est plus souple à mon sens.

Pour buzz, si tu veux considérer cette option, c’est des mots clefs “apache en front” ou “frontend” qu’il faut chercher.

Je suis finalement passé par le proxyreverse d’apache car je ne voulais aps lancer le second serveur en tant que root, ce qui est obligatoire si je veux passer par le port 80…

Ainsi je peux lancer le second serveur sur un port quelconque >1024 avec un utilisateur avec des droits limités, et joindre le serveur via une IP spécifique et le port 80 en passant par apache.

Merci de votre aide.

T’es sur qu’il ne forke pas avec un compte non privilegie ?

Apache fait ca, par exemple. Il se lance en root, cree le socket et passe la main a un processus fils sous le compte “apache” qui fait tout le boulot.
Edité le 01/06/2009 à 13:47

Non, d’ailleurs par défaut il est configuré sur le port 8080, c’est un serveur écrit en python. A priori rien à voir avec apache et www-data, dans la liste des processus, il n’y a qu’une référence au serveur lancé par l’utilisateur qui lance la commande, et sans passer par le root pour le lancer, impossible d’utiliser le port 80.

Je ne voudrai pas qu’un module buggé puisse supprimer ou altérer des fichiers auxquels il ne devrait pas avoir accès.

Heu… Tu parle pas de Zope quand même ?

C’est possible, je ne sais pas quel serveur est inclus dans openerp-web, c’est peut-être préciser quelque part, est-ce que ça change quelque chose si c’était le cas ?

Zope est une usine a gaz, c’est tout :paf:
Mais openerp ne semble pas utiliser de zope…

quoiqu’il en soit, la doc ( doc.openerp.com… ) semble indiquer qu’il y a moyen de le lancer avec un autre utilisateur que root et ils conseillent Apache+mod_proxy comme frontal https
Donc ta facon de faire semble etre dans les bonnes pratiques mais si c’est pas la plus simple.

De toute facon, c’est pour de l’interne ton serveur ?

Oui juste de l’intranet, et pour apache en https, c’est normal si le serveur fournit ne gère que le protocole http…

Par défaut ils utilisent le port 8080, mais bon, avoir à indiquer le port dans l’url de son navigateur, faut un minimum de formation en plus pour que n’importe qui intègre bien le principe, autant s’en passer en utilisant le port 80 dont monsieur tout le monde n’a aucune idée de l’existence ni de l’utilité…