7 votes

Comment configurer des hôtes virtuels basés sur les noms avec Ubuntu 12.04 ?

Comment configurer des hôtes virtuels basés sur les noms avec Ubuntu 12.04 ?

J'ai suivi les instructions données à https://help.ubuntu.com/12.04/serverguide/httpd.html#http-configuration .

J'ai fait ce qui suit...

  1. cp default newsite
  2. remplacer "/var/www" par "/var/www/newsite" dans newsite
  3. ajouter "ServerName newsite.example.com" à newsite

Après quelques recherches, j'ai trouvé un article de blog qui indiquait que je devais désactiver le site par défaut à l'aide de a2dissite default . Après avoir fait cela, cela a fonctionné. Est-ce exact ? Cela n'est jamais mentionné dans le guide du serveur Ubuntu. Le guide contient également cette ligne...

"L'hôte virtuel par défaut n'a pas de directive ServerName spécifiée, il est donc répondra à toutes les requêtes qui ne correspondent pas à une directive ServerName. dans un autre hôte virtuel."

Ce qui semble impliquer que le site par défaut et d'autres sites peuvent coexister.

J'utilise une nouvelle installation du serveur 12.04 et j'ai rechargé la configuration d'Apache à chaque fois que j'ai fait un ajustement.

En résumé... après avoir ajouté un nouveau fichier sous /etc/apache2/sites-available (une copie modifiée du fichier "default" avec l'ajout de la directive ServerName) et le lien symbolique correspondant sous /etc/apache2/sites-enabled, est-il nécessaire de désactiver ou de renommer le lien symbolique du site par défaut pour que le nouveau site fonctionne ? La documentation et une réponse donnée ci-dessous semblent indiquer qu'il n'est pas nécessaire de le faire, mais si c'est le cas, qu'est-ce que j'ai fait de mal ? En utilisant la configuration ci-dessous, lorsque j'essaie d'accéder à newsite.example.com, j'obtiens le site par défaut.

/etc/apache2/sites-available$ cat default

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                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 ${APACHE_LOG_DIR}/error.log

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

        CustomLog ${APACHE_LOG_DIR}/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>

</VirtualHost>

/etc/apache2/sites-available$ cat newsite

<VirtualHost *:80>

        DocumentRoot /var/www/newsite
        ServerName newsite.example.com
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/newsite/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

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

        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

/etc/apache2/sites-enabled# ls -l

root@sandbox:/etc/apache2/sites-enabled# ls -l
total 0
lrwxrwxrwx 1 root root 26 Mar 18 09:56 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root 26 Mar  7 13:36 newsite -> ../sites-available/newsite

5voto

arielf Points 2623

Il s'agit plus d'une question de configuration d'Apache que d'Ubuntu.

Oui, vous pouvez faire fonctionner plusieurs serveurs virtuels sur un hôte, chacun servant un contenu distinct, à condition qu'ils soient tous liés (par exemple via DNS) au même serveur.

La documentation officielle sur la création de serveurs virtuels (version 2.2, mais cette fonctionnalité n'a pas fondamentalement changé entre les versions) se trouve ici :

httpd.apache.org/docs/2.2/vhosts/

La réponse courte est que vous devez le faire :

  • définir vos hôtes virtuels
  • inclure une correspondance entre vos noms d'hôtes et le contenu qu'ils servent

Cela se fait en ajoutant une clause d'hôte virtuel à un fichier de configuration d'Apache, par exemple sous /etc/apache2/sites-available/000-add-my-virtual-hosts (nom conçu spécifiquement pour précéder le nom par défaut 000 dans l'ordre alphabétique)

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName hostname1.mydomain.com
    DocumentRoot /home/www/hostname1
</VirtualHost>

<VirtualHost *:80>
    ServerName hostname2.mydomain.com
    DocumentRoot /home/www/hostname2
</VirtualHost>

Notez que vous peut Il convient également d'ajouter des liens à partir de /etc/apache2/sites-enabled/ a /etc/apache2/sites-available si le site dont vous avez besoin se trouve déjà dans le second mais pas dans le premier.

EDIT 1 :
Après avoir lu la page de manuel de a2dissite il devient clair que tout ce qu'il fait est de supprimer le lien symbolique de /etc/apache2/sites-enabled/ . L'essentiel est de comprendre que la commande dans laquelle ces configurations sont traitées peut affecter le résultat final. Le site par défaut s'appelle 000-défaut dans l'ordre de chargement. S'il correspond à tous les sites, c'est-à-dire s'il agit comme un joker, vous ne verrez pas les autres. Essayez de renommer le lien pour qu'il ait un numéro plus élevé, par exemple 999-défaut afin qu'il soit chargé en dernier (après que les autres sites aient été mis en correspondance).

EDIT 2 : Pour répondre à votre nouvelle question : oui, il est nécessaire de renommer ou de supprimer le site par défaut parce que le nom de son fichier de configuration commence par "000", ce qui fait qu'il se charge en premier et qu'il "prend le dessus" en raison de la correspondance des caractères génériques. Je suppose que la documentation peut être améliorée sur ce point.

EDIT 3 : L'ordre d'apparition des noms de serveurs, leur importance et d'autres aspects sont décrits sur le site suivant cette page apache dans la section Serveur virtuel basé sur le nom L'une des phrases concernées est la suivante :

The first vhost on this list (the first vhost in the config file with the
specified IP address) has the highest priority and catches any request to
an unknown server name or a request without a Host: header field.

et plus tard sous Observations :

... the ordering of name-based vhosts for a specific address set is significant.
The one name-based vhosts that comes first in the configuration file has the
highest priority for its corresponding address set.

2voto

Registered User Points 4494

En utilisant Ubuntu pour héberger Apache, la définition des serveurs virtuels, dans le cas des systèmes basés sur Debian, la définition des sites web se fait sur

/etc/apache2/sites-enabled/*.conf

où *conf correspond à

internal1.conf internal2.conf internal3.conf internal4.conf

La définition du serveur virtuel de chacun de ces sites sera la suivante

/etc/apache2/sites-enabled/internal1.example.conf

lorsque vous dites

The default virtual host has no ServerName directive specified, so it will 

répondre à toutes les demandes qui ne correspondent pas à un nom de serveur dans un autre hôte virtuel.

Cela signifie que

Lorsque Apache sert des sites web à partir de plusieurs serveurs virtuels, il lit les noms de fichiers dans l'ordre alphabétique. C'est la raison pour laquelle le fichier par défaut que vous avez mentionné avait le numéro 000-default. le nom des hôtes est donc important.

si une requête arrive pour quelque chose.quelque chose à votre serveur et qu'il lit les fichiers vhosts par ordre alphabétique dans /etc/apache2/sites-enabled/

et il ne trouve pas le fichier de configuration requis dans le répertoire sites-enabled
il (apache2) servira le premier fichier vhost par ordre alphabétique un bon conseil est donc de toujours utiliser un fichier par défaut 000-default, soit vide, soit pointant vers une page d'erreur comme vous le souhaitez.

Vous pouvez maintenant avoir la configuration suivante pour internal1.example.com

<virtualhost *:80>

    ServerAdmin webmaster@yoursite
    DocumentRoot /var/www/yoursite <--this is an important place should be there
    ServerName yourservername
    ServerAlias www.mydomain.com  <-- if you do not need this do not put it
    ErrorLog /var/logs/apache2/yoursite/error_log  <--logs can be customized 
    CustomLog /var/logs/apache2/yoursite/access_log common
</VirtualHost>

comme dans l'exemple ci-dessus, vous pouvez créer internal2.example.conf, internal3.example.conf et ainsi de suite vous n'avez pas besoin d'autres lignes dans les tags si vous n'en avez pas besoin dans votre configuration vous pouvez peut-être jeter un coup d'oeil à ce lien http://www.debian-administration.org/articles/18

2voto

David Points 457

Je ne sais pas pourquoi cela est souvent négligé, mais le mot-clé important dans le fichier de configuration de votre site est "ServerAlias".

NameVirtualHost *:80

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

<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>

1voto

deandownsouth Points 11

Juste pour ajouter au post de David, bien que je n'utilise pas Ubuntu, j'utilise Apache et j'ai remarqué que je pouvais accéder au site en utilisant le www.domain.com complet mais que lorsque je l'utilisais sans le www, il utilisait simplement le premier site défini (qui est le site par défaut). Notez que le DNS était correctement configuré en ce sens que www est défini sur @ (nom d'hôte), ce qui était donc correct.

L'ajout de la directive ServerAlias a donc permis de résoudre le problème. Je suis encore en train de parcourir la documentation, il y a donc peut-être d'autres façons de résoudre le problème.

Mon fichier de configuration était (en partie) :

Nom du serveur www.domain.com

Lorsque je l'ai changé en (en ajoutant la ligne ServerAlias) :

Nom du serveur domain.com ServerAlias www.domain.com

qui a résolu le problème. J'ai l'intention de tester les options de configuration de David et de n'utiliser qu'un *.domain.com pour que des choses comme ftp.domain.com ou smtp.domain.com fonctionnent.

0voto

idbrii Points 161

@Corey

Il semble que vous maîtrisiez les fichiers de configuration d'Apache. Et vous savez où chercher la documentation. Si je comprends bien, vous n'êtes pas sûr d'utiliser l'utilitaire a2ensite. D'après le pages de manuel de a2ensite :

a2ensite est un script qui permet au site spécifié (qui contient a bloc) dans la configuration d'apache2. créant des liens symboliques dans /etc/apache2/sites-enabled. De même, a2dis- désactive un site en supprimant ces liens symboliques. Ce n'est pas une erreur de d'activer un site qui est déjà activé, ou d'en désactiver un qui l'est déjà. déjà désactivé

.

Toute l'aide dont vous pourriez avoir besoin peut être trouvée à l'adresse suivante Site web d'Apache . Il s'agit d'une documentation très laconique et sèche, mais il vaut la peine de prendre le temps de se familiariser avec elle.

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