Конфигурация Apache по умолчанию не соответствует несопоставленным запросам

571
cedmans

Среда

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 % ^example\.com [NC] RewriteCond % !=on RewriteRule .* https://%% [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 должны обрабатываться несоответствующие сайты, но это не так. Кто-нибудь может увидеть сделку с моим конфигом, которая вызывает это?

1
Не знаю, исправит ли это что-нибудь, кроме трех предложений о 000-default ... Во-первых, в строке Apache 2.4.x не требуется директива NameVirtualHost (и на самом деле она устарела). Во-вторых, я бы заменил с , Большинство конфигураций, которые я вижу, имеют этот синтаксис даже для 000-default. В-третьих, вы можете захотеть отключить (a2dissite) и повторно включить (a2ensite) 000-default, независимо от того, чтобы убедиться, что он действительно включен (не забудьте перезапустить Apache, очевидно). Anaksunaman 6 лет назад 0
Ну, то, что вы сказали, это именно то, что исправил. Возможно, указав этот порт. Я признаю, что мой Apache-fu слаб, поэтому я очень благодарен вам за вашу помощь. cedmans 6 лет назад 0
Да, я подозреваю, что порт тоже. В любом случае, пожалуйста. Рад, что это исправлено. :-) Anaksunaman 6 лет назад 0

1 ответ на вопрос

0
Anaksunaman

Я бы посоветовал взглянуть на три вещи в отношении файла конфигурации по умолчанию:

  • Линия Apache 2.4.x не требует директивы NameVirtualHost (и на самом деле она устарела), поэтому я бы это удалил.

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

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