По умолчанию виртуальный хост 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 и проверьте его.

Будь счастлив =)