Конфігурація Apache за замовчуванням не відповідає невідповідним запитам


1

Середовище

Ubuntu 16.04 / Apache 2.4.18

Проблема

Один з моїх конфігурацій Apache відповідає кожному запиту, незалежно від того, чи відповідає ім’я ServerName. Навіть різні домени збігаються, а не лише субдомени. Як визначити виправлення, чому цей конфігурація відповідає всім?

Деталі

У мене є дві активні конфігурації 000-defaultта конфігурація для одного з моїх доменів.

Проблема полягає в тому, що якщо я ввімкнув конфігурацію для цього одного домену, він конфігурує всі запити, незалежно від того, чи використовую я підроблений субдомен або навіть зовсім інший домен, який налаштований вказувати на IP-адресу цього сервера.

Щоб було зрозуміло, у мене ще немає конфігурації для цього іншого домену, тому він не повинен відповідати нічого.

Здається, конфігурації завантажуються в належному порядку, тому для замовчування конфігурація 000 повинна бути конфігурацією за замовчуванням.

Конфігурація

# 000-default.conf
NameVirtualHost *
<VirtualHost *>
  ServerName default
  ServerSignature Off
  Redirect 404 /
</VirtualHost>

.

# example-com.conf
<VirtualHost *:80>
  ServerName example.com
  ServerAlias example.com
  ServerSignature Off

  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^example\.com [NC]
  RewriteCond %{HTTPS} !=on
  RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [NE,R,L]
</VirtualHost>

Оскільки мій інший домен не відповідає цьому першому RewriteCond, він просто повертає порожні 200. Тому, ймовірно, не потрібно звертати увагу на той факт, що нічого не обслуговує цей маршрут HTTPS:

# curl -I http://example.com
HTTP/1.1 302 Found <== This is good, that redirects as expected
$ curl -I http://fake.example.com
HTTP/1.1 200 OK <== That's bad, it hit the example.com config, failed the RewriteCond, and just returned a blank 200
$ curl -I http://other-domain.com
HTTP/1.1 200 OK <== Also bad, same reason as above

Здається, Apache завантажує речі в потрібному порядку:

# apache2ctl -S
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/sites-enabled/000-default.conf:1
VirtualHost configuration:
*:*                    default (/etc/apache2/sites-enabled/000-default.conf:3)
*:80                   example.com (/etc/apache2/sites-enabled/example-com.conf:1)

З цим наказом завантаження 000-default слід обробляти невідповідні сайти, але це не так. Чи може хтось бачити угоду з моїм конфігурацією, що викликає це?


Не знаю, чи це виправить щось, окрім трьох пропозицій щодо 000-ти за замовчуванням ... По-перше, рядок 2.4.x Apache не вимагає директиви NameVirtualHost (і насправді вона застаріла). По-друге, я б замінив <VirtualHost *> на <VirtualHost *: 80>. Більшість конфігурацій, які я бачу, мають цей синтаксис навіть за замовчуванням 000. По-третє, ви можете відключити (a2dissite) і повторно включити (a2ensite) за замовчуванням 000, незалежно від того, щоб переконатися, що він фактично включений (не забудьте очевидно перезапустити Apache).
Анаксунаман

Ну, те, що ви сказали, саме те і виправило. Можливо, вказавши цей порт. Зізнаюся, мій Apache-fu слабкий, тому я дуже дякую за допомогу.
cedmans

Так, моя підозра є і на порту. У будь-якому випадку, ласкаво просимо. Радий, що це виправлено. :-)
Anaksunaman

Відповіді:


0

Я б запропонував переглянути три речі стосовно файлу конфігурації за замовчуванням:

  • Рядок 2.4.x в Apache не вимагає директиви NameVirtualHost (і вона насправді застаріла), тому я б її видалив.

  • Я б замінив <VirtualHost *>на <VirtualHost *:80>. Більшість конфігурацій, які я бачу, мають цей синтаксис навіть за замовчуванням 000. Відсутність цього формату може перешкоджати використанню хостів для запитів.

  • Вам слід відключити (a2dissite) і знову включити (a2ensite) файл конфігурації за замовчуванням, щоб переконатися, що він фактично включений (не забудьте також перезапустити Apache).

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