Почему версия моего хоста Apache с поддержкой SSL без поддержки SSL обслуживает контент с другого хоста?

Почему версия моего хоста Apache с поддержкой SSL без поддержки SSL обслуживает контент с другого хоста?

У меня есть несколько веб-сайтов, работающих на локальном хосте с Apache/Ubuntu.

Я только что успешно установил самоподписанные сертификаты для одного из них, назовем его securesite.local. Другой сайт без ssl, назовем его , insecuresite.localтакже работает как и ожидалось.

То есть, если я перейду к

https://securesite.local
http://insecuresite.local

Каждый из них несет правильный контент.

Однако если я перейду на http://securesite.localнего, он покажет контент изinsecure.local

Мой /etc/hosts содержит

127.0.1.1 securesite.local
127.0.1.1 insecuresite.local

/etc/apache2/apache2.conf содержит

IncludeOptional sites-enabled/*.conf

Он не содержит явных ссылок на securesite или insecuresite.

ls /etc/apache2/sites-enabled

securesite.conf insecuresite.conf

insecuresite.conf содержит (здесь сокращенно)

<VirtualHost insecuresite.local:80>
    ServerName insecuresite.local
    ServerAlias insecuresite.local
    # ...

securesite.conf содержит (здесь сокращенно)

<VirtualHost securesite.local:443>
    ServerName securesite.local
    ServerAlias securesite.local
    # ...

Я хочу, чтобы Apache отклонял соединения с securesite.local через любой порт, кроме 443, а не переходил на обслуживание контента с любого другого сайта, который разрешает трафик на этом localhost:80.

Почему это происходит и как это остановить?

решение1

На основании ваших файлов insecuresite.conf и securesite.conf, один из них прослушивает порт 80, а другой — 443. Когда вы переходите кhttp://securesite.local, ваш браузер запрашивает данные с порта 80, а единственное, что обслуживается на порту 80, — это insecuresite.local.

Чтобы исправить это, вам нужно будет определить виртуальный хост для securesite.local:80 и сделать перенаправление на https. Также вам нужно будет убедиться, что NameVirtualHost *в вашем файле apache2.conf есть .

Тогда ваши два файла конфигурации будут выглядеть примерно так:

<VirtualHost *:80>
    ServerName insecuresite.local
    ServerAlias insecuresite.local
    # ...

и

<VirtualHost *:80>
    ServerName securesite.local
    ServerAlias securesite.local
    Redirect permanent / https://securesite.local
    # ... 
<VirtualHost *:443>
    ServerName securesite.local
    ServerAlias securesite.local
    # ...

Если опция NameVirtualHost включена, Apache будет проверять ServerNames и ServerAliases и предоставлять данные соответствующим образом.

решение2

Гнезда привязаны и соединения выполненыIP-адреса, а не имена хостов.Поскольку оба виртуальных хоста имеют одинаковые IP-адреса, для них обоих существует только один сокет прослушивателя, и Apache не может знать, какой домен будет запрошен, пока мы не получимпослеон принял соединение – он должен получить HTTP-запрос (или рукопожатие TLS SNI).

Файлы из sites-enabledсчитываются в асибетическом порядке, поэтому вы можете настроить «запасной» виртуальный хост в файле с именем sites-enabled/00-default.confили как-то так. (Другими словами, укажите его перед любыми другими виртуальными хостами для того же IP-адреса.)

Связанный контент