2010-02-09 2 views
5

J'essaie d'héberger deux sites Web utilisant Apache à partir du même serveur Ubuntu. J'ai une adresse IP, et j'ai seulement un domaine (qui résout à l'adresse IP). Donc, je veux des demandes au nom de domaine pour donner un site Web, et demande à l'adresse IP pour donner l'autre.Servir deux sites Web avec Apache avec un seul nom de domaine et une seule adresse IP

J'ai des liens symboliques dans/etc/apache2/sites-enabled vers deux fichiers, pointant vers la config pour mes deux sites.

One contient:

<VirtualHost 1.2.3.4:80> 
    ServerName 1.2.3.4 
    stuff 
</VirtualHost> 

tandis que l'autre contient

<VirtualHost domain.net:80> 
    ServerName domain.net 
    stuff 
</VirtualHost> 

Cependant, quand je lance Apache, je reçois le message suivant:

[warn] VirtualHost 1.2.3.4:80 overlaps with VirtualHost domain.net:80, the first has precedence, perhaps you need a NameVirtualHost directive 

et quand je pointe mon navigateur à soit domain.net ou 1.2.3.4 Je reçois le site que je veux associé à l'adresse IP.

Si je supprime un lien symbolique, le fait de pointer un navigateur sur le nom de domaine ou l'adresse IP indique le seul site Web activé. (Comme vous voudriez l'espérer.)

Si je comprends bien, les deux fichiers de configuration dans les sites activés sont chargés en même temps, et celui qui contient l'adresse IP l'emporte sur celui qui contient le nom de domaine. L'avertissement suggère de regarder la directive NameVirtualHost, mais toute l'aide que je peux trouver en ligne se réfère à des cas où vous avez deux noms de domaine pointant vers la même adresse IP.

Comme toujours, et de l'aide ou des conseils seraient grandement appréciés.

(Pour ce que ça vaut la peine, les sites sont à la fois des applications Rails, et je suis déploiement à l'aide des passagers, mais je ne pense pas que ce soit important.)

+0

Pour votre information, des questions comme celles-ci sont mieux servis sur serverfault.com –

Répondre

9

Voici comment je le fais:

NameVirtualHost 1.2.3.4:80 

<VirtualHost 1.2.3.4:80> 
    ServerName localhost 
    DocumentRoot /var/www/default 
</VirtualHost> 

<VirtualHost 1.2.3.4:80> 
    ServerName mydomain.net 
    DocumentRoot /var/www/mydomain 
</VirtualHost> 

Apache recherche un hôte virtuel adapté à chaque requête. S'il ne trouve pas celui qui correspond à ServerName ou l'un des ServerAliases alors il prend le premier. Peu importe ce que vous utilisez pour le ServerName dans le premier VirtualHost car il sera toujours utilisé si aucun des autres VirtualHosts ne correspond.

+0

Mec, je vous remercie beaucoup. – grifaton

+0

Merci merci merci! J'ai essayé de savoir comment arrêter Apache de servir du contenu aléatoire quand quelqu'un fait une demande d'IP et maintenant je sais. :) – johnjohn

+1

Donc, vous avez utilisé un fichier virtualhost pour les 2 domaines? – Alucard

0

Assurez-vous que vous avez l'instruction

NameVirtualHost *:80 

dans /etc/apache2/ports.conf

4

eu ce problème, voici ce que je faisais:

Modifier httpd.COnF

sudo vi /etc/apache2/httpd.conf 

Ajouter cette ligne

NameVirtualHost *:80 

REMARQUE: Vous pouvez remplacer *: 80 avec votre_adresse_IP: 80

Créez maintenant le fichier de noms de domaine de configuration. J'utilise le domain_name.com

sudo vi /etc/apache2/sites-available/domain.com 

Ajouter ce fichier au

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName www.domain.com 
    ServerAlias domain.com 
    DocumentRoot /var/www/domain.com/public_html/ 
    ErrorLog /var/www/domain.com/logs/error.log 
    CustomLog /var/www/domain.com/logs/access.log combined 
</VirtualHost> 

Assurez-vous que les répertoires dans la configuration domain.com existe

/var/www/domain.com/public_html/ 
/var/www/domain.com/logs 

REMARQUE: utilisez la commande mkdir comme si nécessaire

sudo mkdir /var/www/domain.com/public_html/ 
sudo mkdir /var/www/domain.com/logs 

Maintenant, nous devons activer le nouveau fichier de configuration comme celui-ci

sudo a2ensite domain.com 

Vous devriez voir un avis de redémarrer apache, utilisez cette commande

/etc/init.d/apache2 restart 

Maintenant, nous avons besoin d'un fichier test pour voir

sudo vi /var/www/domain.com/public_html/index.html 

Ajouter un texte

Hello domain.com 

Ouvrez votre navigateur Web et accédez à votre nouveau domaine

http://domain.com 
Questions connexes