У меня есть сервер linode с Apache2, на котором работает несколько сайтов с виртуальным хостингом.
Все сайты нормально работают с портом 80, но у одного сайта есть сертификат ssl, и он также работает нормально.
Моя проблема в следующем:
Сайты без HTTPS при посещении https://domain.com - показать содержимое единственного безопасного сайта ...
Есть ли способ отключить совпадение *: 443 для этих незащищенных сайтов?
Спасибо!
РЕДАКТИРОВАТЬ (дополнительная информация):
Вот типичная конфигурация сайтов, доступных для обычного небезопасного http-сайта:
<VirtualHost *:80>
ServerName www.insecure.com
ServerAlias insecure.com
...
</VirtualHost>
Защищенный сайт https выглядит следующим образом:
<VirtualHost *:80>
ServerName www.secure.com
Redirect permanent / https://secure.com/
</VirtualHost>
<VirtualHost *:80>
ServerName secure.com
RedirectMatch permanent ^/(.*) https://secure.com/$1
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLProtocol all
SSLCertificateChainFile ...
SSLCertificateFile ...
SSLCertificateKeyFile ...
SSLCACertificateFile ...
ServerName secure.com
ServerAlias secure.com
...
</VirtualHost>
Итак, в гостях:
Как сказал Питер, привяжите VirtualHost к явному IP. Если у вас несколько IP-адресов, это должно решить вашу проблему прямо сейчас.
Если вы работаете с одним IP, убедитесь, что вы указали явное имя сервера в своем: 443 VirtualHost (s).
Также имейте в виду, что Apache по умолчанию использует VirtualHosts, который также может работать против вас. Независимо от того, какой VirtualHost определен первым для данного порта, становится значением по умолчанию. Я часто обнаруживаю, что определяю явные VirtualHosts, чтобы учесть это. Возможно, в вашем сценарии вы можете создать одноразовый VirtualHost и подключить самозаверяющий сертификат. Это должно позволить вашим явно определенным сайтам существовать самостоятельно.
Изменить: я беру свой комментарий к ServerName после учета комментария Doon.
Вы могли бы захотеть изучить ИмяBasedSSLVHosts в вики Apache, но я не думаю, что это решит вашу проблему, поскольку, как видно из ваших примеров, используются разные домены. Это сработало бы, если бы они были поддоменами, использующими групповой сертификат.
Проблема в том, что HTTPS не использует заголовок хоста, поскольку обмен сертификатами происходит, когда клиент подключается к 443. Итак, пока вы можете использовать mod_rewrite для перенаправления https://insecure.com
вернуться к http://insecure.com
на основе HTTP_HOST. это произойдет после того, как пользователю будет представлено предупреждение сертификата о несоответствии имени хоста.
Но что-то вроде этого должен работать в вашем блоке конфигурации https
RewriteCond %{HTTP_HOST} !^secure\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://%{HTTP_HOST}/$1 [L,R]
Документы Apache Предлагаем указать номер порта без поддержки SSL в строке NameVirtualHost, например:
NameVirtualHost 192.168.1.1:80
Это помогает? Он должен остановить сопоставление незащищенных сайтов. В противном случае попробуйте переместить безопасный сайт, чтобы он стал первым из VirtualHosts.