Обробка за замовчуванням для нерівних доменів / субдоменів в Apache


12

У мене конфігурація Apache2 з декількома VirtualHosts. Мій DNS налаштовано на прийняття *.<domain>.<tld>у кількох доменах. Все працює правильно, але якщо я переходжу до програми, something-random-here.example.comя, мабуть, вибрав недійсний VirtualHost (я здогадуюсь, перший або останній, який він знайде). Чи є спосіб сказати Apache використовувати певні правила, якщо жодна із записів VirtualHost не відповідає домену чи субдомену? Я бажаю повернути 404.

Відповіді:


12

Apache використовує перший virtualhost, якщо ім'я не відповідає. Просто налаштуйте новий virtualhost як перший із випадковим іменем, відображаючи все, що вам подобається - або повертаючи сторінку 404.


Дякую, але ви можете, будь ласка, докладно? Я не можу змусити це працювати.
Ryall

2
Як розміщені ваші файли конфігурації apache2? Або яку операційну систему ви використовуєте? Apache зчитує конфігурацію в певному порядку, і перша VirtualHost, яку він бачить, є типовою. Він отримує весь трафік від невідомих імен хоста. Отже, якщо у вас є один файл конфігурації, перший VirtualHost це. Якщо у вас є кілька таких, як у більшості Linux, це може бути той, що називається 0default або так ...
Moritz Обидва

Я помістив декілька конфігурацій за замовчуванням у ports.conf. Це не спрацювало, тому що я намагався співставити *: 80, коли я використовував <ip>: 80 у своїх віртуальних хостах. Натомість мені довелося створити окремий запис за замовчуванням для кожного IP, і він працює зараз.
Ryall

Ні мій перший, ні останній V-хост-файли не використовуються. Я думаю, що апаш змінився.
Кобольт

4

Підстановка включає файли конфігурації вашого сайту:

Include path/to/site/confs/*httpd.conf

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

01-httpd.conf

02-site1-httpd.conf

03-site2-httpd.conf

тощо ...

Apache прочитає їх у порядку. Потім створіть той, який завжди завантажуватиметься останнім, щоб зловити будь-які незрівнянні віртуальні хости та повернути 404 замість завантаження сайту за замовчуванням.

99-catchall-httpd.conf

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

Не забудьте замінити порти будь-якими портами, які слухає ваш httpd. Або якщо у вас є прослуховування httpd на певних інтерфейсах, вам потрібно буде додати catchall для кожного інтерфейсу, наприклад:

<VirtualHost 192.168.1.101:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

Сподіваюсь, це допомагає. Я використовую цей метод для завантаження сайтів у визначеному нами порядку та запобігаю ненавмисному завантаженню несподіваних віртуальних хостів.


чи "ServerAlias ​​*" не слід видаляти з усіх правил лову?
Ahm3d сказав

Я думаю, це не мало значення. Якщо жоден з віртуальних хостів до catchall не звертається із запитом, вони повернуть відповідь 404. Я не бачу причини того, що ServerAlias ​​* доведеться видалити, але вони можуть бути непотрібними.
Джейсон Слобоцький

0

Як Moritz Bothзгадується, Apache2 використовуватиме перший знайдений ним віртуальний хост, якщо він не відповідає жодному, що ви просили.

При першому встановленні Apache2 з'являється конфіденційний веб-сайт, який ви можете використовувати як шаблон, змінювати чи видаляти, і мені завжди було цікаво, для чого насправді 000-default.conf, оскільки вони також мали default.conf. Прочитавши Moritz Bothсказане, зараз усе має сенс.

Що я зробив для свого сервера, це скопіювати конфігурацію імені хоста (веб-сайт) за замовчуванням у файл 000-default.conf та a2ensite 000-default.

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


1
Я роблю те саме, але мій невідповідний / за замовчуванням хост надсилає переадресацію на належний сайт верхнього рівня, який також змінює відображувану URL-адресу на правильну.
іваніван

Це дійсно чудова ідея! Я про це не думав. Я обов'язково буду реалізовувати свій сайт таким чином :)
Newteq Developer

З якихось причин я не можу заставити свою ssl (сторінку за замовчуванням) переадресувати. У мене є, <VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> але URL-адреса залишається такою ж. Я зробив те ж саме для версії non ssl, і вона перенаправляє правильно. Будь-які ідеї?
Newteq Developer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.