Раньше я задавал здесь вопрос: Единый домен SSL представлен для всех доменов на общем IP о настройке безопасных и незащищенных доменов на одном IP.
Мнения были смешанными, но похоже, что решение принято в SNI. К сожалению, я не могу заставить его работать должным образом.
Я хочу, чтобы мой сервер отправлял сертификат только для domaina.com
и никаких других имен хостов, даже если это означает отправку ошибки 403 клиентам, не относящимся к SNI. Моя текущая конфигурация на ванильном Ubuntu Server 12.04 LTS ниже:
Ports.conf
…
<IfModule mod_ssl.c>
NameVirtualHost *:443
Listen 443
</IfModule>
…
Домен Виртуальный хост
<VirtualHost *:80>
ServerName domaina.com
ServerAlias www.domaina.com
DocumentRoot /var/www/domaina.com/public
ErrorLog /var/www/domaina.com/logs/error.log
CustomLog /var/www/domaina.com/logs/access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName domaina.com
ServerAlias www.domaina.com
DocumentRoot /var/www/domaina.com/public
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/domaina.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/domaina.key
SSLCertificateChainFile /etc/apache2/ssl/domaina.com.ca-bundle
</VirtualHost>
</IfModule>
Виртуальный хост домена B
<VirtualHost *:80>
ServerName domainb.com
ServerAlias www.domainb.com
DocumentRoot /var/www/domainb.com/public
ErrorLog /var/www/domainb.com/logs/error.log
CustomLog /var/www/domainb.com/logs/access.log combined
</VirtualHost>
apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443 is a NameVirtualHost
default server domaina.com (/etc/apache2/sites-enabled/domaina.com:12)
port 443 namevhost domaina.com (/etc/apache2/sites-enabled/domaina.com:12)
*:80 is a NameVirtualHost
default server domaina.com (/etc/apache2/sites-enabled/domaina.com:3)
port 80 namevhost domaina.com (/etc/apache2/sites-enabled/domaina.com:3)
port 80 namevhost domainb.com (/etc/apache2/sites-enabled/domainb.com:1)
Syntax OK
Как можно избавиться от настроек по умолчанию?
Вы буквально не можете делать то, что просите, сохраняя оба домена на одном IP-адресе.
Сейчас у вас есть оба домена (domaina.com и domainb.com) на одном IP-адресе. Затем вы открыли порт 80 для HTTP и порт 443 для HTTPS. Как вы заметили, порт открыт для всех доменов на сервере; он не может быть закрыт только для одного домена, оставаясь открытым для любого другого.
Если вы вообще не хотите, чтобы SSL был открыт для domainb.com, вам нужно будет поместить domainb.com на отдельный IP-адрес.
В качестве альтернативы вы можете просто использовать .htaccess для соответствующего перенаправления запросов. Не лучшее решение, но если вам нужно использовать один IP-адрес, это может сработать для вас.
Итак, домен .htaccess domaina.com может иметь что-то вроде
#redirect domainb https requests
RewriteCond %{HTTP_HOST} ^domainb.com$
RewriteRule ^(.*)$ http://domainb.com%{REQUEST_URI} [L,R=301]