Apache2 com SSL, tenho que copiar os blocos do VirtualHost?

18

No Apache2 no ubuntu, tenho meu site ouvindo 80, e agora quero adicionar SSL. Existe uma maneira de habilitar o SSLEngine para a porta 443, para que eu não precise copiar todo o bloco VirtualHost?

Quando eu faço isso:

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
  SSLEngine On
  ... a bunch more lines...
</VirtualHost>

Está ativando o SSLEngine para a porta 80. Existe uma maneira de usar apenas o bloco VirtualHost e ativar o SSLEngine apenas para a porta 443? Para que eu possa fazer algo assim?

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
   <IfPort 443>
      SSLEngine On
   </IfPort>
   ... a bunch of lines I don't want to copy into another VirutalHost block...
</VirtualHost>
dar
fonte

Respostas:

14

Você não pode fazer um vhost fazer HTTP e HTTPS, porque eles são vhosts separados que atendem a protocolos separados. Em vez disso, você deve colocar toda a configuração comum em um arquivo separado e incluir esse arquivo nos vhosts SSL e não SSL do domínio.

Exemplo mínimo:

# /etc/apache2/sites-available/example.com
<VirtualHost *:80>
  Include /etc/apache2/domains/example.com
</VirtualHost>

<VirtualHost 192.0.2.1:443>
  SSLEngine On
  SSLCertificateFile /etc/ssl/example.com_crt
  SSLCertificateKeyFile /etc/ssh/example.com_key

  Include /etc/apache2/domains/example.com
</VirtualHost>

# /etc/apache2/domains/example.com
ServerName example.com
ServerAlias www.example.com

ServerAdmin [email protected]
DocumentRoot /home/example/public_html
ErrorLog /home/example/apache/error.log
mulher
fonte
Você pode me dar um pequeno exemplo de como deve ser o arquivo? Ele precisa de um invólucro do VirtualHost ou devo apenas mover todas as linhas para ele sem nenhum invólucro?
Dar
11
Eu adicionei um exemplo à minha resposta.
Womble
1

Como mencionei em uma pergunta diferente no stackoverflow ( /programming/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167# 52375167 ):

Outra opção, em vez de usar, Includeestá usando Macro(para que você possa manter tudo em um arquivo).

Primeiro ative o módulo macro:

a2enmod macro

Em seguida, coloque seu material compartilhado em uma macro e useem seus virtualhosts:

<Macro SharedStuff>
   ServerName example.com
   ServerAdmin [email protected]
   <DocumentRoot /var/www/example>
      ...
   </DocumentRoot>
</Macro>

<VirtualHost *:80>
  Use SharedStuff
</VirtualHost>

<VirtualHost *:443>
  Use SharedStuff

  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3
  ...
</VirtualHost>

As macros também podem aceitar parâmetros e serem definidas em outros arquivos incluídos; para que você possa usá-los um pouco como o Functions e salvar muita duplicação nos arquivos de configuração do Apache.

Veja aqui para mais detalhes:

https://httpd.apache.org/docs/2.4/mod/mod_macro.html

Seb
fonte
0

Você pode colocar as configurações de diretório em um <Directory>bloco fora de qualquer <VirtualHost>bloco. Isso os aplicará em todos os hosts virtuais, mas apenas dentro do caminho especificado.

DanMan
fonte