Posso definire HTTP e HTTPS nello stesso VirtualHost in Apache conf?

Ho una grande definizione di VirtualHost che non voglio duplicare in modo che il sito verrà eseguito anche su HTTPS.

Ecco cosa voglio fare:

<VirtualHost *> ServerName example.com <If port=443> SSLEngine on SSLCertificateFile ... SSLCertificateKeyFile ... SSLCertificateChainFile ... </If> (other config) </VirtualHost> 

C'è qualche modo per farlo?
Sono mancante un altro metodo per non duplicare la configuration?

  • Apache2 Virtual Host rotto; visualizzato index.html predefinito nel sottodominio, ma il contenuto corretto su www.subdomain
  • Apache: host virtuali con più posizioni con più radici di documento: è ansible?
  • Come faccio a gestire le autorizzazioni per più utenti che modificano lo stesso codice sul mio server?
  • Nuovamente aggiunto virtualhost non funzionante, punti di dominio per / var / www /
  • ESXi 4.1 su un'unità logica separata RAID 10 o un'unità logica singola RAID 10
  • Come automatizzare gli scenari web zabbix per vhosts?
  • Il dominio viene reindirizzato al sito sbagliato in nginx, siti multipli nei file di configuration
  • Apache: DocumentRoot basato su Client-IP
  • 3 Solutions collect form web for “Posso definire HTTP e HTTPS nello stesso VirtualHost in Apache conf?”

    L'attuale versione stabile di Apache (2.2) non ha questa funzionalità, ma la 2.4 ha la direttiva IF .

    È necessario creare due VirtualHosts per ora, ma è ansible impostare alcune cose attraverso le variables globali di ambiente o apache e utilizzarlo nella configuration di virtualhost (impostando ad esempio il documentoroot). In questo modo, se si desidera modificare, è ansible farlo con una sola modifica.

    Naturalmente, puoi includere anche per fare qualcosa di simile:

     <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 sarà mainstream anni prima dell'adattamento IPv6. Tutto il browser principale lo support già assumendo che tu sia in un sistema operativo supportto.

    edit: come fooquency notato non puoi mettere SSLEngine su un block If quindi la mia risposta è sbagliata.

    No. È ansible spostare la maggior parte delle cose alla configuration globale e ereditarla nel VirtualHost.

    Per gli host virtuali SSL, è necessario utilizzare una seconda port ala

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

    o è necessario utilizzare IP separati

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

    C'è un'ottima spiegazione nei documenti Apache SSL http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html

    Cerca in basso per "Perché non posso utilizzare SSL con host virtuali basati su nomi / non IP"?

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.