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


13

Eu tenho uma definição bastante grande do VirtualHost que não quero duplicar, apenas para que o site também execute sobre 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 para não duplicar a configuração?

Respostas:


12

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

Você precisa criar dois VirtualHosts por enquanto, mas pode definir algumas coisas por meio de variáveis ​​globais do ambiente ou do apache e usá-las na sua configuração de host virtual (definindo a raiz do documento, por exemplo). Dessa forma, se você quiser alterar, poderá fazê-lo com apenas uma linha de modificação.

Obviamente, 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: O SNI será o principal ano antes da adaptação do IPv6. Todo o navegador convencional suporta, já que você esteja em um sistema operacional suportado.

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


8
Tentar inserir SSLEngine Onum <If>dará SSLEngine not allowed here, portanto, infelizmente, o caso de uso sugerido no início desta resposta não parece possível. Isso ocorre porque o requisito de que "somente diretivas que suportam o contexto de diretório pode ser usado nesta seção de configuração". (ref) e SSLEngineé server config, virtual host (ref) , não diretório.
fooquency

3

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


1
Infelizmente, tenho alguns VirtualHosts, cada um com configurações diferentes e mais precisando trabalhar com HTTP e HTTPS.
Jake

1
Por mais inútil que seja essa resposta, é a única correta. Por favor, mude para um servidor web que não é ruim. :)
intgr 10/11/2015


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ê precisa usar IPs separados

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

Existe uma explicação muito boa nos documentos do Apache SSL http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html

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


2
Esteja ciente disso para o futuro, no entanto: en.wikipedia.org/wiki/Server_Name_Indication
mattdm

Ironicamente, quando o SNI for amplamente aceito o suficiente para ser usado com segurança na maioria dos sites de hospedagem virtual, o IPv6 provavelmente será comum o suficiente para torná-lo irrelevante.
jgoldschrafe

4
@jgoldschrafe Olá, 2010, é o futuro falando aqui! Caniuse recente mostra que navegadores não SNI são <2% em todo o mundo. Desde o primeiro mundo, é provavelmente muito, muito menos. IPv4 ainda está vivo e bem :)
kubanczyk

2
@kubanczyk Got me! :)
jgoldschrafe

@jgoldschrafe Mesmo com o IPv6, eu ainda previa o SNI ao atribuir blocos de endereços a uma única máquina, pois os IPs são principalmente para roteamento e é mais fácil gerenciar dessa maneira.
Bachsau 29/02
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.