Служить http (порт 80) и https (порт 443) на том же VirtualHost

Мне нужно настроить мой VirtualHost на Apache для обслуживания как на http, так и на https (используя стандартные порты)

Если я включу движок SSL (как показано ниже) - я получаю сообщение об ошибке на порту 80.

Причина в том, что части сайта должны быть SSL, а другие - нет. Как я могу обслуживать как http + https на сайте?

Вот мой файл виртуального хоста ....

NameVirtualHost *

<VirtualHost *>
        ServerAdmin [email protected]
        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>
22 голоса | спросил kron 22 PM00000030000002131 2011, 15:31:21

2 ответа


38

Вы не можете сделать это на одном виртуальном хосте, потому что Apache должен знать, какой из них будет говорить SSL, а какой нет (sidenote: nginx не имеет этой проблемы, вы можете сказать, какие директивы прослушивания связаны к SSL, одна из многих причин, которые мне нравятся).

То, как я управляю этим в Apache, заключается в том, чтобы поместить всю мою конфигурацию, не связанную с SSL, в отдельный файл, а затем настроить два vhosts друг на друге, каждый из которых содержит файл конфигурации для конкретного сайта в строфе vhost , вот так:

<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>
ответил womble 22 PM00000030000000831 2011, 15:38:08
5

Кажется, проблема в Apache vHost, но она выполняет эту работу без повторной настройки.

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>
ответил VarunAgw 5 42015vEurope/Moscow11bEurope/MoscowThu, 05 Nov 2015 23:08:42 +0300 2015, 23:08:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132