Meu servidor hospeda vários subdomínios (vhosts) de um website, digamos sub1.example.com e sub2.example.com. A única diferença entre esses vhosts é o documentroot. Todo o resto é compartilhado entre vhosts.
Agora eu gostaria de fazer o mesmo para HTTPS, mas é claro que o ssl + virtualhost é complicado. O bom é que meu certificado SSL é válido para o meu domínio completo. Portanto, não preciso especificar o certificado per-vhosts. A única coisa que quero especificar por vhost é a raiz do documento.
A FAQ diz:
Name-Based Virtual Hosting is a very popular method of identifying
different virtual hosts. It allows you to use the same IP address and
the same port number for many different sites. When people move on to
SSL, it seems natural to assume that the same method can be used to
have lots of different SSL virtual hosts on the same server.
It is possible, but only if using a 2.2.12 or later web server, built
with 0.9.8j or later OpenSSL. This is because it requires a feature
that only the most recent revisions of the SSL specification added,
called Server Name Indication (SNI).
Estou usando o Ubuntu 11.10, que vem com o Apache 2.2.20 e o openssl 1.0.0e, então acho que deveria ser bom. No entanto, não consigo fazer isso funcionar. Eu já tenho sites default e ssl-padrão habilitados. Se eu adicionar um virtualhost como eu faria para HTTP:
<VirtualHost *:443>
ServerName sub1.example.com
DocumentRoot /var/www/sub1
</VirtualHost>
E então tente reiniciar o Apache, eu recebo:
[Thu Mar 01 23:55:15 2012] [warn] default VirtualHost overlap on
port 443, the first has precedence Action 'start' failed.