Apache по умолчанию VirtualHost - PullRequest
       27

Apache по умолчанию VirtualHost

28 голосов
/ 25 марта 2011

как я могу установить VirtualHost по умолчанию в apache? Желательно, чтобы хост по умолчанию не совпадал с хостом IP-адреса. Теперь у меня есть что-то вроде этого:

NameVirtualHost *

<VirtualHost *>
ServerAdmin admin@domain.com
DocumentRoot /someOtherDir/
ServerAlias ip.of.the.server
</VirtualHost>

<VirtualHost *>
ServerAdmin admin@domain.com
DocumentRoot /someroot/
ServerAlias domain.com *.domain.com
</VirtualHost *>

Если домен перенаправлен на мой сервер, но отсутствует в этом файле vhost.conf, файлы из / someOtherDir / загружаются, как и ожидалось. Но я хочу иметь возможность использовать другой корень для самого ip-адреса и доменов, которые еще не добавлены в файл vhost.conf (пока). Возможно ли это?

edit: немного исправил мой код, теперь он больше похож на настоящий файл vhost.conf

Ответы [ 7 ]

46 голосов
/ 25 марта 2011

Я нашел ответ: я вспомнил, что Apache использует первый блок, если другой соответствующий блок не найден, поэтому я добавил блок без serveralias вверху блоков:

NameVirtualHost *

<VirtualHost *>
DocumentRoot /defaultdir/
</VirtualHost>

<VirtualHost *>
ServerAdmin admin@domain.com
DocumentRoot /someOtherDir/
ServerAlias ip.of.the.server
</VirtualHost>

<VirtualHost *>
ServerAdmin admin@domain.com
DocumentRoot /someroot/
ServerAlias domain.com *.domain.com
</VirtualHost>
8 голосов
/ 11 февраля 2017

Если вы используете конфигурацию виртуального хоста в стиле Debian (сайты доступны / сайты включены), один из способов установить виртуальный хост по умолчанию - сначала включить файл конкретной конфигурации в 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
2 голосов
/ 24 апреля 2019

Я скажу, что сработало для меня, остальные ответы выше не помогли моему делу вообще.Я надеюсь, что это может кому-то помочь.

На самом деле я использую конфигурацию виртуального хоста (sites-available / sites-enabled) в 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>

Для каждого file.conf вна доступных сайтах я создаю символическую ссылку:

sudo ln -s /etc/httpd/sites-available/domain.com.conf /etc/httpd/sites-enabled/domain.com.conf

Это конфигурация по умолчанию, поэтому, если доступ осуществляется напрямую по IP-адресу сервера, вы будете перенаправлены на DocumentRoot первого файла (.conf) в доступной для сайтов папке, отсортированной по имени файла.

Чтобы иметь по умолчанию папку DocumentRoot при доступе по IP , необходимо создать файл с именем 0a.conf, тогда apache будет обслуживать этот сайт, поскольку этот новый файл будет первым на сайтах-доступная папка.

Вы должны создать символическую ссылку:

sudo ln -s /etc/httpd/sites-available/0a.conf / etc / httpd / sites-enabled/0a.conf

Чтобы проверить порядок подачи, используйте его:

sudo apachectl -S

Теперь перезапустите apachи проверить это.

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

2 голосов
/ 21 января 2018

Другие ответы здесь не сработали, но я нашел довольно простое решение, которое сработало.

Я сделал по умолчанию последний из перечисленных и дал 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, он получает веб-сайт по умолчанию.

2 голосов
/ 23 сентября 2013

Альтернативным параметром является наличие виртуального хоста по умолчанию в конце файла конфигурации, а не в начале. Таким образом, все альтернативные виртуальные хосты будут проверены перед сопоставлением с виртуальным хостом по умолчанию.

Пример:

NameVirtualHost *:80
Listen 80

...

<VirtualHost *:80>
        ServerName host1
        DocumentRoot /someDir
</VirtualHost>

<VirtualHost *:80>
        ServerName host2
        DocumentRoot /someOtherDir
</VirtualHost>

<VirtualHost *:80>
        DocumentRoot /defaultDir
</VirtualHost>
0 голосов
/ 31 мая 2019

У меня была такая же проблема.Я мог бы это исправить, добавив следующее в httpd.conf непосредственно перед директивами IncludeOptional для виртуальных хостов.Теперь localhost и IP 192.168.xx указывают на тестовую страницу Apache по умолчанию.Все остальные виртуальные хосты работают как положено.

<VirtualHost *:80>
    DocumentRoot /var/www/html
</VirtualHost>

Ссылка: https://httpd.apache.org/docs/2.4/vhosts/name-based.html#defaultvhost

0 голосов
/ 25 марта 2011

NameVirtualHost вариант будет хорошим вариантом.

...