Настройте Apache для обслуживания нескольких поддоменов через HTTP + HTTPS
У меня есть виртуальный сервер, размещенный на ISP с 2 общедоступными адресами IPv4. Я хочу запустить несколько поддоменов (более 2) с Apache и обслуживать их через HTTP и HTTPS. Сертификат SSL является символом подстановки для *.mydomain.com.
Я попытался настроить Apache в Debian таким образом, но не получилось. Либо мои виртуальные хосты не принимаются, либо я получаю ошибки SSL. (Я знаю, что Apache не видит имя хоста, запрошенное перед обслуживанием сертификата, но сертификат включает все возможные субдомены)
Помогите, пожалуйста, создать httpd.conf, который лучше всего работает с макетом конфигурации Apache Debian.
Все детали:
- Apache прослушивает *:80 для HTTP и *:443 для HTTPS
- Все NameVirtualHosts, псевдонимы и т. Д. Должны быть определены для обоих портов / протоколов одновременно
- по умолчанию mydomain.com и www.mydomain.com должны получить root права на /var/www
- дополнительные NameVirtualHosts для foo.mydomain.com, bar.mydomain.com и т. д., которые могут быть специально настроены, например, чтобы иметь другой DocumentRoot
1 ответ
Apache может видеть запрошенное имя хоста, используя индикацию имени сервера TLS.
Однако для этого требуется сравнительно новый веб-браузер. Например, те, кто использует Internet Explorer в Windows XP, получат сообщения о несоответствии сертификатов для дополнительных доменов. (К счастью, пользователи WinXP/IE почти вымерли.) В статье Википедии есть список, и вот тестовая страница, если вы не уверены.
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www
<Directory /var/www/>
Options Indexes FollowSymlinks MultiViews
</Directory>
</VirtualHost>
NameVirtualHost *:443
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www
<Directory /var/www/>
Options Indexes FollowSymlinks MultiViews
</Directory>
SSLEngine on
SSLCertificateFile /etc/ssl/private/example.com.pem
</VirtualHost>
Дополнительные (суб) домены:
<VirtualHost *:80>
ServerName foo.example.com
DocumentRoot /sites/foo
</VirtualHost>
<VirtualHost *:443>
ServerName foo.example.com
DocumentRoot /sites/foo
SSLEngine on
SSLCertificateFile /etc/ssl/private/foo.example.com.pem
</VirtualHost>