Назад | Перейти на главную страницу

Как Apache узнает, какой сайт загружать, если несколько сайтов подключены к одному порту?

У меня есть 2 сайта на моем локальном хосте. Один на localhost: 8197 и один на fc.localhost: 8197 Конечно, чтобы это работало, я отредактировал свой файл / etc / hosts, включив в него

fc.localhost    127.0.0.1

Итак, это мои конфигурации для каждого сайта соответственно:

000-default.conf (сайт находится на локальном хосте):

<VirtualHost *:8197>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory /var/www/html/>
        Options +Indexes +FollowSymLinks +ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

fc.conf (сайт расположен по адресу fc.localhost):

<VirtualHost *:8197>
    ServerAdmin webmaster@localhost
    DocumentRoot /home/alex/Documents/fc/Website/fc/html
    ServerName fc.localhost
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory /home/alex/Documents/fc/Website/fc/html>
        Options +Indexes +FollowSymLinks +ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
</VirtualHost>

Предположим, что мой локальный IP-адрес - 10.8.210.51, а какой-то компьютер в моей локальной сети помещает 10.8.210.51:8197 в адресную строку своего браузера, тогда apache на моей стороне будет обслуживать первый сайт (localhost), а не второй ( fc.localhost). То же самое произойдет, если я введу 127.0.0.1:8197 в адресную строку (на стороне сервера).

Итак, из очевидного интереса мой вопрос: как Apache решает, какой сайт обслуживать, и как я могу изменить это поведение?

Краткий ответ для вашего конкретного случая: apache будет обслуживать ПЕРВЫЙ перекрывающийся виртуальный хост. Поскольку 000-default стоит перед fc.localhost в алфавите, загружается и обслуживается первый виртуальный хост.

Чтобы ответить на то, что я предполагаю, это следующий вопрос: вы можете разместить много сайтов на одном IP: PORT, используя namedVirtualHosts

Эта технология основана на Заголовок хоста в спецификации HTTP.

И из-за сложностей с SSL https виртуальные хосты возможны через Индикация имени сервера

Это называется «виртуальный хостинг на основе имени», описанный Вот: