По умолчанию виртуальный хост Apache
как установить виртуальный хост по умолчанию в apache?
Предпочтительно, я хочу, чтобы хост по умолчанию не был таким же, как хост IP-адреса. Теперь у меня есть что-то вроде этого:
NameVirtualHost *
<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someOtherDir/
ServerAlias ip.of.the.server
</VirtualHost>
<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someroot/
ServerAlias domain.com *.domain.com
</VirtualHost *>
Если домен перенаправляется на мой сервер, но не находится в этом файле vhost.conf, файлы из/someOtherDir/загружаются, как и ожидалось. Но я хочу иметь возможность использовать другой корень для самого ip-адреса и домены, которые не добавлены в файл vhost.conf(пока). Возможно ли это?
Изменить: немного скорректировал мой код, поэтому он больше похож на фактический файл vhost.conf
Ответы
Ответ 1
Я нашел ответ: я вспомнил, что Apache использует первый блок, если не найдено другого подходящего блока, поэтому я добавил блок без serveralias
в верхней части блоков:
NameVirtualHost *
<VirtualHost *>
DocumentRoot /defaultdir/
</VirtualHost>
<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someOtherDir/
ServerAlias ip.of.the.server
</VirtualHost>
<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someroot/
ServerAlias domain.com *.domain.com
</VirtualHost>
Ответ 2
Если вы используете конфигурацию виртуального хоста в стиле Debian (доступны сайты/доступны для сайтов), один из способов установить VirtualHost по умолчанию - это включить конкретный файл конфигурации сначала в httpd.conf или apache.conf(или то, что когда-либо было ваш основной файл конфигурации).
# To set default VirtualHost, include it before anything else.
IncludeOptional sites-enabled/my.site.com.conf
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
# Load virtual host config files from "/etc/httpd/sites-enabled/".
IncludeOptional sites-enabled/*.conf
Ответ 3
Другие ответы здесь не помогли мне, но я нашел довольно простое решение, которое действительно сработало.
Я сделал по умолчанию последний, указанный в списке, и я дал ему ServerAlias *
.
Например:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.secondwebsite.com
ServerAlias secondwebsite.com *.secondwebsite.com
DocumentRoot /home/secondwebsite/web
</VirtualHost>
<VirtualHost *:80>
ServerName www.defaultwebsite.com
ServerAlias *
DocumentRoot /home/defaultwebsite/web
</VirtualHost>
Если посетитель явно не решил перейти к чему-то, заканчивающемуся на secondwebsite.com
, он получает веб-сайт по умолчанию.
Ответ 4
Альтернативный параметр - иметь виртуальный хост по умолчанию в конце файла конфигурации, а не в начале. Таким образом, все альтернативные виртуальные хосты будут проверяться до того, как будут сопоставлены виртуальным хостом по умолчанию.
Пример:
NameVirtualHost *:80
Listen 80
...
<VirtualHost *:80>
ServerName host1
DocumentRoot /someDir
</VirtualHost>
<VirtualHost *:80>
ServerName host2
DocumentRoot /someOtherDir
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /defaultDir
</VirtualHost>
Ответ 5
NameVirtualHost будет хорошим вариантом.
Ответ 6
Я скажу, что сработало для меня, остальные ответы выше не помогли моему делу вообще. Я надеюсь, что это может кому-то помочь.
На самом деле, я использую конфигурацию виртуального хоста (сайты доступны/сайты включены) в EC2 Linux AMI с Apache/2.4.39 (Amazon). Итак, у меня есть 1 экземпляр ec2 для обслуживания многих сайтов (доменов).
Учитывая, что у вас уже установлен и работает Virtual Host. В моей папке /etc/httpd/sites-available у меня есть несколько файлов с доменными именами (суффикс .conf), например: domain.com.conf. Создайте новый файл, как это.
sudo nano/etc/httpd/sites-available/domain.com.conf
<VirtualHost *:80
ServerName www.domain.com
ServerAlias domain.com
DocumentRoot /var/www/html/domain
</VirtualHost>
Для каждого файла .conf на сайтах, доступных, я создаю символическую ссылку:
sudo ln -s/etc/httpd/sites-available/domain.com.conf/etc/httpd/sites-enabled/domain.com.conf
Это конфигурация по умолчанию, поэтому при доступе напрямую по IP-адресу сервера вы будете перенаправлены на DocumentRoot первого файла (.conf) в папке sites-available, отсортированной по имени файла.
Чтобы иметь доступ к папке DocumentRoot по умолчанию при доступе по IP, необходимо создать файл с именем 0a.conf, а затем Apache будет обслуживать этот сайт, поскольку этот новый файл будет первым в папке, доступной для сайтов.
Вы должны создать символическую ссылку:
sudo ln -s/etc/httpd/sites-available/0a.conf/etc/httpd/sites-enabled/0a.conf
Чтобы проверить порядок обслуживания, используйте его:
sudo apachectl -s
Теперь перезапустите apache и проверьте его.
Будь счастлив =)