Posso definir HTTP e HTTPS no mesmo VirtualHost no Apache conf?

11

Eu tenho uma grande definição VirtualHost que eu não quero duplicar apenas para que o site também seja executado em HTTPS.

Aqui está o que eu quero fazer:

<VirtualHost *>
    ServerName example.com

    <If port=443>
        SSLEngine on
        SSLCertificateFile ...
        SSLCertificateKeyFile ...
        SSLCertificateChainFile ...
    </If>

    (other config)

</VirtualHost>

Existe alguma maneira de fazer isso?
Estou faltando algum outro método de não duplicar a configuração?

    
por Jake 16.12.2010 / 01:31

4 respostas

11

A atual versão estável do Apache (2.2) não tem esse recurso, mas o 2.4 tem o Diretriz IF .

Você tem que criar dois VirtualHosts por enquanto, mas você pode definir algumas coisas através do ambiente ou apache variáveis globais e usar isso em sua configuração virtualhost (configurando o documentroot por exemplo). Desta forma, se você quiser mudar isso, você pode fazê-lo com apenas uma linha de modificação.

Claro, você pode usar o include para fazer algo assim:

<VirtualHost *:80>
        include /etc/apache2/vhost.conf.d/site1
</VirtualHost>

<VirtualHost *:443>
        include /etc/apache2/vhost.conf.d/site1
        include /etc/apache2/vhost.conf.d/site1-ssl
</VirtualHost>

ps: SNI será mainstream anos antes da adaptação IPv6. Todo o navegador mainstream o suporta já assumindo que você está em um sistema operacional suportado.

edite: como fooquency spotted você não pode colocar SSLEngine em um bloco If então minha resposta está errada.

    
por 29.03.2011 / 18:01
3

Não. Você pode mover a maioria das coisas para a configuração Global e herdá-la no VirtualHost.

    
por 16.12.2010 / 02:07
2

Para hosts virtuais SSL, você precisa usar uma segunda porta ala

<VirtualHost *:443>
    ServerName abc.com
</VirtualHost>
<VirtualHost *:4443>
    Servername def.com
</VirtualHost>

ou você tem que usar IPs separados

<VirtualHost 192.168.0.1:443>
    ServerName abc.com
</VirtualHost>
<VirtualHost 192.168.0.2:443>
    Servername def.com
</VirtualHost>

Há uma explicação muito boa nos documentos do Apache SSL link

Pesquise por "Por que não consigo usar SSL com hosts virtuais baseados em nome / não baseados em IP?"

    
por 16.12.2010 / 02:32
1

Isso foi respondido em outra pergunta. Use uma instrução Include. Funcionou como um encanto para mim:

Serve http (porta 80) e https (porta 443) no mesmo VirtualHost

# Acme Co
<VirtualHost 192.168.56.101:80>
        Include /usr/local/apache2/conf/main-acme.conf
</VirtualHost>

###* SSL
<VirtualHost 192.168.56.101:443>
        Include /usr/local/apache2/conf/main-acme.conf
        SSLEngine On
</VirtualHost>
    
por 12.10.2017 / 04:13