Apache не дотримується директиви ServerName для певного сайту


9

У мене кілька сайтів налаштовано як VirtualHosts з використанням Apache, які деякий час працюють добре. Нещодавно я змінив ім'я хоста сервера на одне з доменних імен, яке обслуговувалося, а також додав його до / etc / hosts, що вказує на зовнішню IP-адресу сервера.

Оскільки я це зробив, доступ до домену зі свого ноутбука переводить мене за замовчуванням Apache "Це працює!" сторінки. Якщо я видаляю 000-типовий з / etc / apache2 / включених сайтів /, він відображає правильний сайт. Спроба зайти на сайт за допомогою "www". префікс переводить мене на правильний сайт незалежно від того, чи за замовчуванням 000 увімкнено чи ні.

Виходячи з усього цього, я здогадуюсь, що конфігурація за замовчуванням обслуговує сторінку за замовчуванням через те, як я налаштував ім'я хоста або / etc / hosts (або обидва), але я не можу зрозуміти, як це відключити під час залишивши ці налаштування такими, які є. Будь-які пропозиції ласкаво просимо!

Редагувати - Мій поточний конфігурація VirtualHost виглядає так:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin me@domain.com

    DocumentRoot /srv/www/domain

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

Підводячи підсумок: у мене встановлено кілька VirtualHosts, і це єдиний, який не працює належним чином. Я можу отримати доступ до http://www.domain.com просто чудово, але http://domain.com переводить мене за замовчуванням Apache "Це працює!" сторінки. Якщо я відключу конфігурацію за замовчуванням 000, вона показує належну сторінку. Це почалося лише після того, як я встановив ім'я хоста сервера на domain.com і додав рядок до / etc / hosts, що вказує domain.com на зовнішню IP-адресу сервера. Я хотів би залишити це так, якщо можливо.

Редагувати: я біг, apache2ctl -Sоскільки /usr/sbin/apache2 -Sдав мені "apache2: неправильне ім'я користувача $ {APACHE_RUN_USER}". Ось результат:

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

Чи домен.com використовується в основному файлі httpd.conf як ServerName? або apache2ctl.conf, здається, ви використовуєте ubuntu, тому воно може відрізняти ім'я.
Приз

Відповіді:


12

Забули це питання днями.

Якщо у вас є контейнер <VirtualHost> без компонента ServerName, він використовуватиме ім'я хоста за замовчуванням. Оскільки, за замовчуванням 000, напевно, немає компонента ServerName, і він є першим в алфавітному порядку, тому він відповідає для hostname.com і не дозволяє вашому явно оголошеному імені хоста працювати.


Я бачу, будь-який спосіб це виправити? Я хочу, щоб конфігурація за замовчуванням обробляла будь-які необроблені домени, але я не хочу, щоб вона обробляла саме цей домен.
Джон Дебс

дайте йому домен, відмінний від того, який використовується в конфігурації, або перейменуйте його на zzz-default, щоб він називався останнім.
karmawhore

Гаразд, я думаю, зараз усе це розумію. Я спробував zzz-default, але це не та саме поведінка, яку я хотів. Налаштування ServerName example.comв конфігурації за замовчуванням чудово працює. Дякую!
Джон Дебс

4

Чи є десь директива NameVirtualHost *: 80?

Спробуйте:

/usr/sbin/apache2 -S

Це покаже вам, як apache розбирає конфігураційний файл. Чи є у вас конфігурації, які мають фактичні IP-адреси, або всі мають *? У вас є якісь відсутні: 80? Apache не любить змішувати їх.

У вас за замовчуванням у вас домен ServerName domain.com або ServerAlias ​​domain.com?


Так, я отримав це у своєму /etc/apache2/posts.conf. Додамо резюме до питання, яке, сподіваюся, робить його більш зрозумілим.
Джон Дебс

Мій конфігурація за замовчуванням 000 недоторканий, він не має директив ServerName або ServerAlias.
Джон Дебс

NameVirtualHost застарілий.
Сем

1

Перевірте ServerName та ServerAlias ​​у директиві VirtualHost:

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

Читайте: http://httpd.apache.org/docs/2.2/mod/core.html#serveralias , http://httpd.apache.org/docs/2.2/vhosts/


Це в основному так, як зараз все налаштовано. Я розмістив свою конфігурацію у питанні.
Джон Дебс

0

Це спрацювало:

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

коли у мене була помилка друку, вона НЕ працювала (директива ServerName двічі):

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

Коли у мене було двічі директива ServerName, вона продовжувала вирішуватися на першому переліченому веб-сайті (не показано тут).

сподіваюся, що це комусь допоможе ...


0

У мене була подібна проблема, і виправлено її, встановивши явно серверне ім’я в головному файлі httpd.conf, а не дозволяючи апачу автоматично зрозуміти, що це таке. Я припускаю, що те, що вирішив apache, було таким же, як і мій vhost (визначено пізніше), тому за замовчуванням він "виграв", змінивши налаштування vhost.

Я просто встановив httpd.conf ServerName на ім'я хоста, яке має машина, і я ніколи не буду обслуговувати веб-сторінки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.