web-dev-qa-db-fra.com

Servir http (port 80) et https (port 443) sur le même VirtualHost

J'ai besoin de configurer mon VirtualHost sur Apache pour servir à la fois sur http et https (en utilisant des ports standard)

Si j'active le moteur SSL (comme ci-dessous) - j'obtiens une erreur sur le port 80.

La raison en est que certaines parties du site doivent être SSL mais pas d'autres. Comment puis-je faire pour servir les deux http + https sur le site?

Voici mon fichier hôte virtuel ....

NameVirtualHost *

<VirtualHost *>
        ServerAdmin webmaster@localhost
        ServerName mysite.co.uk
        DocumentRoot /var/www/mysite/public
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/mysite/public>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/Apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/Apache2/access.log combined
        ServerSignature On

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

     #SSL STUFF...
      SSLEngine on
      SSLCertificateFile /etc/Apache2/crts/mysite.crt
      SSLCertificateKeyFile /etc/Apache2/crts/mysite.key
      SSLCertificateChainFile /etc/Apache2/crts/DigiCertCA.crt


</VirtualHost>
31
kron

Vous ne pouvez pas faire cela dans un hôte virtuel, car Apache doit savoir lequel va parler SSL et lequel ne l'est pas (sidenote: nginx n'a pas ce problème, vous pouvez lui dire quelles directives d'écoute se rapportent à SSL; une des nombreuses raisons pour lesquelles je l'aime).

La façon dont je gère cela dans Apache consiste à placer toutes mes configurations non liées à SSL dans un fichier séparé, puis à configurer les deux vhosts côte à côte, chacun incluant le fichier de configuration spécifique au site dans la strophe vhost, comme ceci :

<VirtualHost 192.0.2.12:80>
    Include /etc/Apache2/sites/example.com
</VirtualHost>

<VirtualHost 192.0.2.12:443>
    SSLEngine On
    # etc
    Include /etc/Apache2/sites/example.com
</VirtualHost>
45
womble

Cela semble être un problème dans Apache vHost, mais il fait le travail sans avoir à répéter la configuration.

SSLCertificateFile /srv/.ssl/self/server.crt
SSLCertificateKeyFile /srv/.ssl/self/server.pem

# REQUIRED
<VirtualHost *:80>
    DocumentRoot /srv/www/badhost
</VirtualHost>

<VirtualHost *:80 *:443>
    SSLEngine On
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /srv/www/example.www
</VirtualHost>
7
VarunAgw