Я хочу, чтобы сервер ответил на https://abc.def.com
, но не https://def.com
, все еще служа http://def.com
когда оба домена указывают на один и тот же IP-адрес.
У меня сейчас есть такая конфигурация:
<IfModule mod_ssl.c>
Listen 1.2.3.4:443
<VirtualHost 1.2.3.4:443>
ServerName abc.def.com
[SSL on, key & cert file, etc.]
[...]
</VirtualHost>
</IfModule>
Сайт работает как положено и пока все нормально, но сервер почему-то тоже отвечает на https://def.com
и обслуживает сертификат для abc.def.com вместо отказа в соединении, хотя это нигде не настроено. Default-ssl.conf отключен.
Есть идеи, как сказать серверу не обслуживать сертификат, но отказываться от подключения для ненастроенных доменов? Я думаю, что это должно быть каким-то образом связано с SNI, но я не уверен, возможно ли это и как.
Конфигурация Apache выглядит неплохо, вы можете исправить это на уровне DNS.
Настройте свой хост для разрешения abc.def.com, но не def.com, отредактировав файл локальных хостов и удалив запись
1.2.3.4 def.com
Вы можете сделать это с помощью перенаправления трафика на http
<VirtualHost 1.2.3.4:443>
ServerName def.com
Redirect 301 / http://def.com
</VirtualHost>
Или используя правило перезаписи
RewriteCond %{HTTPS} on
RewriteCond %{SERVER_NAME} ^def.com
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Невозможно. Apache ответит на хосте по умолчанию, если для этого имени хоста не существует определенной конфигурации. И, пока безопасная сторона соединения не настроена с действующим сертификатом, вы не можете контролировать, что отправляется обратно.
Итак, только варианты:
Иметь сертификат, действительный для def.com. На этом этапе вы можете перенаправить обратно на http, но если у вас возникли проблемы с получением сертификата, тогда зачем беспокоиться? Сертификаты для заметок можно получить дешево (или даже бесплатно!).
Отдельный IP-адрес.