Apache2 con SSL ¿tengo que copiar los bloques de VirtualHost?

18

En Apache2 en ubuntu tengo mi sitio escuchando en 80, y ahora quiero agregar SSL. ¿Hay alguna manera de habilitar SSLEngine para el puerto 443 para que no tenga que copiar todo el bloque VirtualHost?

Cuando hago esto:

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

Está activando SSLEngine para el puerto 80. ¿Hay alguna manera de usar solo un bloque VirtualHost y solo activar SSLEngine para el puerto 443? ¿Entonces puedo hacer algo como esto?

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
fuente

Respuestas:

14

No puede hacer que un vhost ejecute HTTP y HTTPS, ya que son vhosts separados que prestan servicios a protocolos separados. En su lugar, debe colocar toda la configuración común en un archivo separado y luego incluir ese archivo en los vhosts SSL y no SSL para el dominio.

Ejemplo 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
womble
fuente
¿Me puede dar un breve ejemplo de cómo debería ser el archivo? ¿Necesita un contenedor VirtualHost, o debería mover todas las líneas sin ningún contenedor?
dar
1
He agregado un ejemplo a mi respuesta.
womble
1

Como mencioné en una pregunta diferente sobre stackoverflow ( /programming/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167# 52375167 ):

Otra opción en lugar de usar Includees usar Macro(para que pueda guardarlo todo en un solo archivo).

Primero habilite el módulo macro:

a2enmod macro

Luego ponga sus cosas compartidas en una macro y usedesde sus hosts virtuales:

<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>

Las macros también pueden tomar parámetros y definirse en otros archivos que están incluidos; para que pueda usarlos un poco como Funciones y guardar muchas duplicaciones en sus archivos de configuración de Apache.

Vea aquí para más detalles:

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

Seb
fuente
0

Puede colocar la configuración del directorio en un <Directory>bloque fuera de cualquier <VirtualHost>bloque. Eso los aplicará a todos los hosts virtuales, pero solo dentro de la ruta especificada.

DanMan
fuente