Apache2 con SSL devo copiare i blocchi VirtualHost?


18

In Apache2 su Ubuntu ho il mio sito in ascolto su 80, e ora voglio aggiungere SSL. Esiste un modo per abilitare SSLEngine per la porta 443, quindi non devo copiare l'intero blocco VirtualHost?

Quando faccio questo:

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

Sta accendendo SSLEngine per la porta 80. Esiste un modo per usare solo un blocco VirtualHost e accendere SSLEngine solo per la porta 443? Quindi posso fare qualcosa del genere?

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>

Risposte:


14

Non è possibile fare in modo che un vhost esegua sia HTTP che HTTPS, poiché sono host separati che servono protocolli separati. Invece, dovresti mettere tutta la configurazione comune in un file separato e quindi includere quel file nei vhosts sia SSL che non SSL per il dominio.

Esempio minimo:

# /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 webmaster@example.com
DocumentRoot /home/example/public_html
ErrorLog /home/example/apache/error.log

Potete darmi un breve esempio di come dovrebbe apparire il file? Ha bisogno di un wrapper VirtualHost o devo semplicemente spostare tutte le linee su di esso senza alcun wrapper?
dar,

1
Ho aggiunto un esempio alla mia risposta.
womble

1

Come ho già detto in una domanda diversa su stackoverflow ( /programming/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167# 52375167 ):

Un'altra opzione invece di utilizzare Includeè l'utilizzo Macro(in modo da poterlo tenere tutto in un unico file).

Per prima cosa abilitare il modulo macro:

a2enmod macro

Quindi inserisci i tuoi contenuti condivisi in una macro e usedai tuoi host virtuali:

<Macro SharedStuff>
   ServerName example.com
   ServerAdmin example@example.com
   <DocumentRoot /var/www/example>
      ...
   </DocumentRoot>
</Macro>

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

<VirtualHost *:443>
  Use SharedStuff

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

Le macro possono anche prendere parametri ed essere definite in altri file inclusi; così puoi usarli un po 'come Funzioni e salvare un sacco di duplicati nei tuoi file di configurazione di Apache.

Vedi qui per maggiori dettagli:

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


0

È possibile inserire le impostazioni della directory in un <Directory>blocco esterno a qualsiasi <VirtualHost>blocco. Ciò li applicherà su tutti gli host virtuali, ma solo all'interno del percorso specificato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.