Apache ne respecte pas la directive ServerName pour un site particulier

9

J'ai quelques sites configurés comme VirtualHosts utilisant Apache qui fonctionnent bien depuis un certain temps. J'ai récemment changé le nom d'hôte du serveur en l'un des noms de domaine qui était servi, et l'ai également ajouté à / etc / hosts pointant vers l'adresse IP externe du serveur.

Depuis que je l'ai fait, accéder au domaine depuis mon ordinateur portable m'amène au défaut d'Apache "Ça marche!" page. Si je supprime 000-default de / etc / apache2 / sites-enabled /, il affiche le site correct. Essayer d'accéder au site avec le 'www.' le préfixe m'amène au site correct, que 000-default soit ou non activé dans les sites.

Sur la base de tout cela, je suppose que la configuration par défaut sert la page par défaut en raison de la façon dont j'ai configuré le nom d'hôte ou / etc / hosts (ou les deux), mais je ne peux pas comprendre comment désactiver cela pendant que en laissant ces paramètres tels quels. Toutes les suggestions sont les bienvenues!

Modifier - Ma configuration VirtualHost actuelle ressemble à ceci:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin [email protected]

    DocumentRoot /srv/www/domain

    ErrorLog /srv/www/domain/logs/error.log
    CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>

Pour résumer: j'ai plusieurs VirtualHosts configurés, et c'est le seul qui ne fonctionne pas correctement. Je peux très bien accéder à http://www.domain.com , mais http://domain.com m'amène au défaut d'Apache "Ça marche!" page. Si je désactive la configuration 000 par défaut, elle affiche la page appropriée. Cela ne s'est produit qu'après avoir défini le nom d'hôte du serveur sur domain.com et ajouté une ligne vers / etc / hosts pointant domain.com vers l'adresse IP externe du serveur. J'aimerais les laisser de cette façon si possible.

Edit: j'ai couru apache2ctl -Sdepuis /usr/sbin/apache2 -Sm'a donné "apache2: mauvais nom d'utilisateur $ {APACHE_RUN_USER}". Voici la sortie:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
         port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK
John Debs
la source
domain.com est-il utilisé sur le fichier httpd.conf principal en tant que ServerName? ou apache2ctl.conf vous semblez utiliser ubuntu donc le nom pourrait différer.
Prix

Réponses:

12

J'ai perdu cette question l'autre jour.

Lorsque vous disposez d'un conteneur <VirtualHost> sans composant ServerName, il utilise le nom d'hôte par défaut. Comme 000-default n'a probablement pas de composant ServerName, et est le premier par ordre alphabétique à être inclus, c'est pourquoi il répond pour hostname.com et ne permet pas à votre nom d'hôte explicitement déclaré de fonctionner.

karmawhore
la source
Je vois, un moyen de résoudre ce problème? Je veux que la configuration par défaut gère tous les domaines non gérés, mais je ne veux pas qu'elle gère ce domaine particulier.
John Debs
donnez-lui un domaine autre que celui qui est utilisé dans une configuration, ou renommez-le en zzz-default pour qu'il soit appelé en dernier.
karmawhore
D'accord, je pense que je comprends tout maintenant. J'ai essayé zzz-default mais ce n'est pas le comportement exact que je voulais. Réglage ServerName example.comdans la configuration par défaut fonctionne très bien, cependant. Merci!
John Debs
4

Avez-vous une directive NameVirtualHost *: 80 quelque part?

Essayer:

/usr/sbin/apache2 -S

Cela vous dira comment apache analyse le fichier de configuration. Avez-vous des configurations qui ont des adresses IP réelles ou toutes ont le *? En manque-t-il: 80? Apache n'aime pas les mélanger.

Avez-vous un nom de domaine Server.com ou un domaine ServerAlias.com par défaut?

karmawhore
la source
Oui, je l'ai dans mon /etc/apache2/posts.conf. J'ajouterai un résumé à la question qui, je l'espère, le rendra plus clair.
John Debs
Ma configuration 000 par défaut est intacte, elle n'a pas de directives ServerName ou ServerAlias.
John Debs
NameVirtualHost est obsolète.
Sam
0

Cela a fonctionné:

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

quand j'ai eu une faute de frappe, cela n'a PAS fonctionné (la directive ServerName deux fois):

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

Lorsque j'ai eu la directive ServerName deux fois, elle a continué à se résoudre sur le premier site répertorié (non illustré ici).

j'espère que cela aide quelqu'un ...

Sam
la source
0

J'ai eu un problème similaire et je l'ai résolu en définissant explicitement un ServerName dans le fichier httpd.conf principal, plutôt que de laisser apache le comprendre automatiquement. Je suppose que ce qu'Apache a décidé était le même que mon vhost (défini plus loin), donc celui par défaut "a gagné", remplaçant le paramètre vhost.

Je viens de définir httpd.conf ServerName sur un nom d'hôte que la machine a, je ne servirai jamais de pages Web.

sstteevvee
la source