web-dev-qa-db-fra.com

Apache VirtualHost par défaut

comment puis-je définir un VirtualHost par défaut dans apache? De préférence, je souhaite que l'hôte par défaut ne soit pas le même que l'hôte de l'adresse IP. Maintenant, j'ai quelque chose comme ça:

NameVirtualHost *

<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someOtherDir/
ServerAlias ip.of.the.server
</VirtualHost>

<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someroot/
ServerAlias domain.com *.domain.com
</VirtualHost *>

Si un domaine est transféré vers mon serveur, mais n'est pas dans ce fichier vhost.conf, les fichiers de/someOtherDir/sont chargés, comme prévu. Mais je veux pouvoir utiliser une racine différente pour l'adresse IP elle-même et les domaines qui ne sont pas encore ajoutés au fichier vhost.conf. Est-ce possible?

edit: corrigé un peu mon code, donc il ressemble plus au fichier vhost.conf réel

28
Tiddo

J'ai trouvé la réponse: je me suis souvenu qu'Apache utilise le premier bloc si aucun autre bloc correspondant n'est trouvé, j'ai donc ajouté un bloc sans serveralias en haut des blocs:

NameVirtualHost *

<VirtualHost *>
DocumentRoot /defaultdir/
</VirtualHost>

<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someOtherDir/
ServerAlias ip.of.the.server
</VirtualHost>

<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someroot/
ServerAlias domain.com *.domain.com
</VirtualHost>
46
Tiddo

Si vous utilisez une configuration d'hôte virtuel de style Debian (sites disponibles/sites activés), une façon de définir un hôte virtuel par défaut consiste à inclure d'abord le fichier de configuration spécifique dans httpd.conf ou Apache.conf (ou quelle que soit votre configuration principale fichier).

# To set default VirtualHost, include it before anything else.
IncludeOptional sites-enabled/my.site.com.conf

# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

# Load virtual Host config files from "/etc/httpd/sites-enabled/".
IncludeOptional sites-enabled/*.conf
8
harmaahylje

Un autre paramètre consiste à avoir l'hôte virtuel par défaut à la fin du fichier de configuration plutôt qu'au début. De cette façon, tous les hôtes virtuels alternatifs seront vérifiés avant d'être mis en correspondance par l'hôte virtuel par défaut.

Exemple:

NameVirtualHost *:80
Listen 80

...

<VirtualHost *:80>
        ServerName Host1
        DocumentRoot /someDir
</VirtualHost>

<VirtualHost *:80>
        ServerName Host2
        DocumentRoot /someOtherDir
</VirtualHost>

<VirtualHost *:80>
        DocumentRoot /defaultDir
</VirtualHost>
2
eaykin

Les autres réponses ici n'ont pas fonctionné pour moi, mais j'ai trouvé une solution assez simple qui fonctionnait.

J'ai fait celui par défaut le dernier répertorié, et je lui ai donné ServerAlias *.

Par exemple:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.secondwebsite.com
    ServerAlias secondwebsite.com *.secondwebsite.com
    DocumentRoot /home/secondwebsite/web
</VirtualHost>

<VirtualHost *:80>
    ServerName www.defaultwebsite.com
    ServerAlias *
    DocumentRoot /home/defaultwebsite/web
</VirtualHost>

Si le visiteur n'a pas explicitement choisi d'aller vers quelque chose se terminant par secondwebsite.com, ils obtiennent le site Web par défaut.

2
ArtOfWarfare

Je vais dire ce qui a fonctionné pour moi, les autres réponses ci-dessus n'ont pas du tout aidé mon cas. J'espère que cela peut aider quelqu'un.

En fait, j'utilise la configuration de l'hôte virtuel (sites disponibles/sites activés) sur EC2 Linux AMI avec Apache/2.4.39 (Amazon). J'ai donc 1 instance ec2 pour desservir de nombreux sites (domaines).

Étant donné que Virtual Host est déjà installé et fonctionne. Dans mon dossier/etc/httpd/sites-available, j'ai quelques fichiers avec des noms de domaine (suffixe .conf), par exemple: domain.com.conf. Créez un nouveau fichier comme ça.

Sudo nano /etc/httpd/sites-available/domain.com.conf

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

Pour chaque fichier.conf dans les sites disponibles, je crée un lien symbolique:

Sudo ln -s /etc/httpd/sites-available/domain.com.conf /etc/httpd/sites-enabled/domain.com.conf

Il s'agit de la configuration par défaut, donc, si vous accédez directement par IP du serveur, vous serez redirigé vers DocumentRoot du premier fichier (.conf) dans le dossier des sites disponibles, trié par nom de fichier.

Avoir un dossier DocumentRoot par défaut lors de l'accès par IP, vous devez créer un fichier nommé 0a.conf, puis Apache servira ce site car ce nouveau fichier sera le premier dans le dossier des sites disponibles.

Vous devez créer un lien symbolique:

Sudo ln -s /etc/httpd/sites-available/0a.conf /etc/httpd/sites-enabled/0a.conf

Pour vérifier l'ordre des portions, utilisez-le:

Sudo apachectl -S

Maintenant, redémarrez Apache et vérifiez-le.

Soyez heureux =)

Obligatoire - rien de ce qui précède n'a fonctionné pour moi. J'ai hérité d'une étrange combinaison d'hôtes virtuels basés sur IP et * hôtes virtuels (non affectés/attrapés tous les IPS) dans cette configuration Apache gâchée par ISPConfig .

Je voulais qu'Apache serve des hôtes non configurés avec la même page. Ce que j'avais était - les hôtes non configurés sont allés au premier vhost après 000-default.conf. Peu importe que j'avais *: 80 catch all défini comme premier vhost, au lieu du défaut, Apache chargerait le premier site défini:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
</VirtualHost>

Bien que ce ne soit pas une configuration complètement valide, ce qui a finalement fonctionné était l'ajout d'un hôte virtuel basé sur IP sans ServerName/ServerAlias ​​défini:

<VirtualHost 192.168.10.10:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost 192.168.10.10:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        SSLEngine On
        ...
</VirtualHost>

$ apachectl -S affiche les vhosts basés sur ip en premier, et les vhosts basés sur * plus tard, et enfin mon site par défaut est chargé avant le vrai site:

AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/Apache2/sites-enabled/000-default.conf:50
192.168.10.10:80        is a NameVirtualHost
         default server server.tld (/etc/Apache2/sites-enabled/000-default.conf:34)
         port 80 namevhost server.tld (/etc/Apache2/sites-enabled/000-default.conf:34)
         port 80 namevhost some-site.tld (/etc/Apache2/sites-enabled/100-some-site.tld.vhost:7)

...

46.23.86.103:443       is a NameVirtualHost
         default server server.tld (/etc/Apache2/sites-enabled/000-default.conf:38)
         port 443 namevhost server.tld (/etc/Apache2/sites-enabled/000-default.conf:38)
         port 443 namevhost some-site.tld (/etc/Apache2/sites-enabled/100-some-site.tld.vhost:182)

...

*:80                   is a NameVirtualHost
         default server server.tld (/etc/Apache2/sites-enabled/000-default.conf:1)
         port 80 namevhost server.tld (/etc/Apache2/sites-enabled/000-default.conf:1)

Remarque: dans une configuration comme celle-ci, * les vhosts ne fonctionneront pas, vous devez donc appliquer les ip à tous les vhosts.

1
seven

J'ai eu le même problème. Je pourrais le corriger en ajoutant ce qui suit dans httpd.conf lui-même avant les directives IncludeOptional pour les hôtes virtuels. Maintenant, localhost et l'IP 192.168.x.x pointent tous les deux vers la page de test par défaut d'Apache. Tous les autres hôtes virtuels fonctionnent comme prévu.

<VirtualHost *:80>
    DocumentRoot /var/www/html
</VirtualHost>

Référence: https://httpd.Apache.org/docs/2.4/vhosts/name-based.html#defaultvhost

0
Neethu Isaac