1 votes

La configuration des sous-domaines d'Apache ne fonctionne pas

J'ai un serveur Debian 6 qui a été configuré par quelqu'un d'autre. On m'a demandé d'ajouter un sous-domaine sur ce serveur.

J'ai configuré le DNS correctement (vérifié avec nslookup ), a créé le répertoire dans /var/www/ puis ajouter un nouvel hôte virtuel à /etc/apache2/sites-available (en fait, j'ai copié le fichier d'un des sous-domaines existants et je l'ai modifié) :

<VirtualHost *:80>
    DocumentRoot "/var/www/mysub.example.com"
    ServerName mysub.example.com
    ServerAlias www.mysub.example.com

    ErrorLog ...[path to file]
    CustomLog [path to file]

    RewriteEngine On 
    #RewriteCond %{HTTP_HOST} ^mysub.example.com$ [NC]
    #RewriteRule ^(.*)$ http://www.mysub.example.com$1 [R=301,L]

    <Directory /var/www/mysub.example.com>
         AllowOverride All
         Require all granted
    </Directory>
</VirtualHost>

J'ai ensuite ajouté mon hôte en utilisant a2ensite et redémarré Apache mais le domaine mysub.example.com est redirigé vers beta.example.com qui est notre site de production bêta. Ce qui est bizarre, c'est qu'il n'y a pas de configuration pour beta.example.com en /etc/apache2/sites-available .

Que dois-je faire d'autre pour activer ce sous-domaine ? Je suis presque sûr que la configuration de example.com ne bloque rien, parce que nous avons également un blog.example.com hôte virtuel configuré de cette manière et il fonctionne parfaitement.

EDIT

Quelques sorties de débogage :

root@xxx:~# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  beta.example.com (/etc/apache2/sites-enabled/01-example.com:18)
*:80                   is a NameVirtualHost
         default server beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
         port 80 namevhost beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
         port 80 namevhost blog.example.com (/etc/apache2/sites-enabled/02-blog.example.com:1)
         port 80 namevhost [here comes other unrelated domain name]
         port 80 namevhost forum.example.com (/etc/apache2/sites-enabled/04-forum.example.com:1)
         port 80 namevhost example.com (/etc/apache2/sites-enabled/05-sth.example.com:1)
         port 80 namevhost mysub.example.com (/etc/apache2/sites-enabled/06-mysub.example.com:1)
Syntax OK

root@xxx:~# grep -r 'mysub\.example\.com' /etc/apache2
/etc/apache2/apache2.conf:Alias /mysub /var/www/mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        DocumentRoot "/var/www/mysub.example.com"
/etc/apache2/sites-available/06-mysub.example.com:        ServerName mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        ServerAlias www.mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        ErrorLog "/var/log/apache2/mysub.example.com-error_log"
/etc/apache2/sites-available/06-mysub.example.com:        CustomLog "/var/log/apache2/mysub.example.com-access_log" common
/etc/apache2/sites-available/06-mysub.example.com:        #RewriteCond %{HTTP_HOST} ^mysub.example.com$ [NC]
/etc/apache2/sites-available/06-mysub.example.com:        #RewriteRule ^(.*)$ http://www.mysub.example.com$1 [R=301,L]
/etc/apache2/sites-available/06-mysub.example.com:        <Directory /var/www/mysub.example.com>

root@xxx:~# grep -r 'beta\.example\.com' /etc/apache2
/etc/apache2/sites-available/01-example.com:        ServerName beta.example.com
/etc/apache2/sites-available/01-example.com:        ServerAlias www.beta.example.com
/etc/apache2/sites-available/01-example.com:        ErrorLog "/var/log/apache2/beta.example.com-error_log"
/etc/apache2/sites-available/01-example.com:        CustomLog "/var/log/apache2/beta.example.com-access_log" common
/etc/apache2/sites-available/01-example.com:        ServerName beta.example.com:443
/etc/apache2/sites-available/01-example.com:        ServerAlias www.beta.example.com:443
/etc/apache2/sites-available/01-example.com:        ErrorLog "/var/log/apache2/beta.example.com-error_log"
/etc/apache2/sites-available/01-example.com:        CustomLog "/var/log/apache2/beta.example.com-access_log" common

EDIT 2 J'ai fait un test rapide. J'ai désactivé le premier hôte virtuel ( beta.example.com ) avec :

a2dissite 01-example.com

Puis il a essayé d'accéder à mysub.example.com et j'ai été redirigé vers blog.example.com - qui est le deuxième dans l'ordre des sites activés. Cela donne donc mysub.example.com n'est pas trouvé et il tombe dans la première case de *.example.com les sous-domaines qu'il trouve.

EDIT 2

Autre test : J'ai changé l'ordre de mes fichiers de configuration pour que mon nouveau sous-domaine soit le premier (par défaut). En ce moment, c'est le cas :

root@xxx:~# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  beta.example.com (/etc/apache2/sites-enabled/01-example.com:14)
*:80                   is a NameVirtualHost
         default server mysub.example.com (/etc/apache2/sites-enabled/00-mysub.example.com:1)
         port 80 namevhost mysub.example.com (/etc/apache2/sites-enabled/00-mysub.example.com:1)
         port 80 namevhost beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
         port 80 namevhost blog.example.com (/etc/apache2/sites-enabled/02-blog.example.com:1)
Syntax OK

Et pourtant, si j'essaie d'entrer mysub.example.com Je suis redirigé vers beta.example.com . Les blog.example.com fonctionne toujours parfaitement.

Est-il possible qu'il y ait une configuration de domaine définie ailleurs (en dehors de l'interface de l /etc/apache2/sites-available ) ?

EDIT 3

Configurations supplémentaires pour les hôtes : beta.example.com et blog.example.com

beta.example.com (fichier : /etc/apache2/hosts-available/01-example.com )

<VirtualHost *:80>
        DocumentRoot "/var/www/example.com"
        ServerName beta.example.com
        ServerAlias www.beta.example.com

        ErrorLog "/var/log/apache2/beta.example.com-error_log"
        CustomLog "/var/log/apache2/beta.example.com-access_log" common

        <Directory /var/www/example.com>
                AllowOverride All
        </Directory>
</VirtualHost>

<VirtualHost *:443>
        DocumentRoot "/var/www/example.com"
        ServerName beta.example.com:443
        ServerAlias www.beta.example.com:443

        ErrorLog "/var/log/apache2/beta.example.com-error_log"
        CustomLog "/var/log/apache2/beta.example.com-access_log" common

        RewriteEngine On
        #RewriteCond %{HTTP_HOST} ^example.com$ [NC]
        #RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]

        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/apache.key

        <Directory /var/www/example.com>
                AllowOverride All
        </Directory>
</VirtualHost>

blog.example.com (fichier : /etc/apache2/hosts-available/02-blog.example.com )

<VirtualHost *:80>
    DocumentRoot "/var/www/blog.example.com"
    ServerName blog.example.com
    ServerAlias www.blog.example.com

    ErrorLog ...[path to file]
    CustomLog [path to file]

    RewriteEngine On 
    #RewriteCond %{HTTP_HOST} ^blog.example.com$ [NC]
    #RewriteRule ^(.*)$ http://www.blog.example.com$1 [R=301,L]

    <Directory /var/www/blog.example.com>
         AllowOverride All
         Require all granted
    </Directory>
</VirtualHost>

2voto

user289372 Points 33

Je vous conseille de déboguer tous vos fichiers, comme l'a dit c4f4t0r, essayez "apache2ctl -S" et ensuite essayez de trouver les règles de réécriture dans les fichiers .htaccess, par exemple :

find /var/www/mysub.example.com -name ".htaccess" -exec grep -l -i rewrite {} \;

Dans votre fichier de configuration principal, vous avez quelque chose de "dangereux" :

<Directory /var/www/mysub.example.com>
     AllowOverride All # <---- THIS
     Require all granted 
</Directory>

2voto

lazzio Points 196

Vous devez vérifier le fichier /etc/apache2/ports.conf et regardez la ligne NameVirtualHost *:80 près de Listen 80

Si vous n'avez pas cette ligne, vous ne pouvez pas utiliser les serveurs virtuels basés sur ServerName, il est donc normal que vous obteniez toujours le premier serveur virtuel activé dans votre navigateur.

1voto

Gacek Points 73

OK, le problème (et la solution) s'est avéré très simple.

Le problème était que les dossiers des sous-domaines nouvellement créés étaient vides - aucun fichier index.php/html ne s'y trouvait. Le serveur, au lieu de l'afficher (en tant que répertoire), redirigeait vers le domaine par défaut - qui était beta.example.com

La configuration des serveurs virtuels était donc correcte, et après avoir ajouté quelques fichiers aux dossiers, les sous-domaines ont commencé à fonctionner.

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