Если у меня есть 3 домена: domain1.com, domain2.com и domain3.com, возможно ли настроить виртуальный хост по умолчанию для доменов, не указанных в списке? Например, если бы я имел:
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain1
ServerName domain1
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain2
ServerName domain2
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/everythingelse
ServerName *
ServerAlias host
</VirtualHost>
Если вы зарегистрируете домен и укажете его на мой сервер, по умолчанию все будет отображаться так же, как и домен3. Это возможно?
apache-2.2
virtualhost
SJaguar13
источник
источник
При использовании виртуальных хостов на основе имен первая загруженная конфигурация виртуального хоста будет использоваться по умолчанию (Источник: Apache Wiki ). Например, с конфигурацией ниже, в противном случае несопоставленные домены будут соответствовать
domain-one.com
:Многие серверы не имеют монолитного файла конфигурации, но имеют несколько специфичных для хоста файлов конфигурации, организованных следующим образом:
В этом случае, чтобы сначала загрузить конкретную конфигурацию виртуального хоста, переименуйте символическую ссылку во что-то, что будет первым при сортировке, например
00-default
.Некоторые из других ответов не совсем верны. Согласно Apache Wiki, не указывать
ServerName
на виртуальном хосте неверно. Если хост без aServerName
не загружается первым, Apache может даже никогда не использовать его, поскольку первый загруженный хост будет использоваться по умолчанию.Кроме того, хотя
ServerAlias *
он действительно будет соответствовать чему-либо, он также может переопределять другие виртуальные хосты, определенные позже. Может быть, этот подход будет работать, если он всегда будет определяться последним виртуальным хостом (как в конфигурации, указанной в вопросе), но это означает добавление новой директивы и изменение порядка сортировки, а не просто изменение порядка, как указано выше.источник
httpd-vhosts.conf
Не указывайте имя сервера, и оно становится вашим vhost по умолчанию.
Также убедитесь, что вы не указали DocumentRoot в основном файле httpd.conf, так как он будет иметь приоритет над vhosts.
источник
Порядок важен - переместите определение vhost для всего остального в начало списка.
источник
Используйте виртуальный хост _default_ и поместите его сначала в httpd-vhosts.conf, как указано в http://httpd.apache.org/docs/2.2/vhosts/examples.html.
«Перехват каждого запроса на любой неуказанный IP-адрес и порт, т. Е. Комбинацию адрес / порт, которая не используется ни для какого другого виртуального хоста [...] vhost по умолчанию никогда не обслуживает запрос, который был отправлен на адрес / порт, который является используется для vhosts на основе имен. Если запрос содержал неизвестный заголовок Host: или его отсутствовал, он всегда обслуживается от основного vhost на основе имен (vhost для этого адреса / порта появляется первым в файле конфигурации). "
Фрагмент из живого, но запутанного httpd-vhosts.conf, который блокирует все vhosts для порта 80:
Подробное описание процесса сопоставления vhost можно найти здесь: http://httpd.apache.org/docs/2.2/vhosts/details.html.
источник
_default_
используется только для несопоставленных IP - адресов , поэтому, когда у вас есть подстановочный символ vhost (*: 80), он никогда не будет использоваться.Подстановочный знак включает в себя файлы конфигурации вашего сайта:
Организуйте файлы conf вашего сайта так, чтобы они загружались в ожидаемом порядке. Пример...
01-httpd.conf
02-site1-httpd.conf
03-site2-httpd.conf
и т.д...
Apache прочитает их по порядку. Затем создайте тот, который будет всегда загружаться последним, чтобы перехватить любые несоответствующие виртуальные хосты и вернуть 404 вместо загрузки сайта по умолчанию.
99-Catchall-httpd.conf
Обязательно замените порты теми портами, которые слушает ваш httpd. Или, если у вас есть прослушивание httpd на определенных интерфейсах, вам нужно вместо этого добавить ловушку для каждого интерфейса, например так:
Надеюсь это поможет. Я использую этот метод для загрузки сайтов в указанном мной порядке и предотвращаю непреднамеренную загрузку неожиданного сайта несопоставленными виртуальными хостами.
источник
Лучшее решение - переименовать файл конфигурации сайта, начиная с «1», чтобы он сначала загрузился, и это будет ваш сайт по умолчанию.
Apache2 делает первый загруженный vhost-файл страницей по умолчанию.
источник
000-default
виртуальный хост.при использовании
<VirtualHost *:port>
и указании ServerName / ServerAlias для хостов, которые вас интересуют, и это то, что мне нужно было сделать.Немного предыстории в моей ситуации:
У меня есть динамический IP-адрес от моего интернет-провайдера, поэтому мой IP-адрес зарегистрирован в компании, регистрирующей динамический IP-адрес (в моем случае noip.org). Один из моих «хостов» должен был быть зарегистрирован при регистрации DNS как myabc.example.com как CNAME, который указывает на host1.ddns.net. Но host2.ddns.net остался как есть. Я хотел, чтобы myabc.example.com и host1.ddns.net перешли на site1, а host2.ddns.net - на сайт 2, а все остальное, включая мой IP-адрес, - по умолчанию.
Первый чтение конф файл будет по умолчанию, то есть
000_def.conf
,001_site1.conf
,002_site2.conf
будет прочитан в таком порядке с ,000_def.conf
как сайт по умолчанию. (примечание: в моем случае у меня есть эти «файлы», в/etc/apache2/sites-enabled
которых на самом деле находятся динамические ссылки на настоящий файл conf в/etc/apache2/sites-available
)Поскольку имя_сервера используется в 001_site1.conf и 002_site2.conf, для него также должно быть установлено значение 000_def.conf.
источник