1

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

Он не содержит никаких явных ссылок на сайт безопасности или сайт безопасности.

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, чтобы не отказываться от обслуживания контента с любого другого сайта, который разрешает трафик на этот локальный хост:80.

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

2 ответа2

0

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

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

0

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

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

Ваши два файла 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 и соответственно обрабатывать данные.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .