
У меня есть несколько веб-сайтов, работающих на локальном хосте с 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-адреса.)