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

Virtualhost один сайт https, остальные http

У меня есть сервер 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.