Как сделать так, чтобы сайт работал только с SSL шифрованием

У TCP протоколов http и https, как и у других, есть стандартные порты. Для http это 80, для https443.

После того как посетитель сайта укажет доменное имя в адресной строке, браузер попытается осуществить соединение к порту 80.

Для того, чтобы сайт работал только с SSL шифрованием (по протоколу https), необходимо настроить перенаправления (редиректы) с одного адреса типа http://domain.com на другой - типа https://domain.com. По этой причине также следует отдельно настроить виртуальный хост вебсервера не только для порта 443, но и для 80, - в противном случае при переходе по доменному имени вместо директории необходимого виртуального хоста (domain.com) с портом 80 будет отображено содержимое или первого в списке виртуального хоста (например, domain.net) с портом 80 (первый в списке хост считается виртуальным хостом по умолчанию), или – при отсутствии иных виртуальных хостов – содержимое папки, заданной директивой DocumentRoot. Данная директива, сами виртуальные хосты и другие глобальные настройки веб-сервера определяются в главном конфигурационном файле Apache httpd.conf или apache2.conf. Исходя из выше сказанного, в файл httpd.conf необходимо добавить следующие записи:

#объявление виртуального хоста для порта 80:
NameVirtualHost 10.10.10.10:80

#объявление виртуального хоста для порта 443:
NameVirtualHost 10.10.10.10:443

#виртуальный хост для домена domain.com, порт 443 
<VirtualHost 10.10.10.10:443>
    SSLEngine on
    SSLCertificateFile /root/mycertificate/ca.crt
    SSLCACertificateFile /root/mycertificate/ca-bundle.crt
    SSLCertificateKeyFile /root/mycertificate/ca.key
    ServerAdmin webmaster@domain.com
    DocumentRoot /var/www/html/domains/domaincom
    ServerName domain.com
    ErrorLog /var/log/domaincom-error_log
    CustomLog /var/log/domaincom-access_log common
</VirtualHost>

#виртуальный хост для домена domain.com, порт 80
<VirtualHost 10.10.10.10:80>
    ServerName domain.com    
    RewriteEngine On
    RewriteRule (.*) https://domain.com
</VirtualHost>

После внесения изменений в файл httpd.conf нужно перезагрузить веб-сервер:

service httpd restart

Результатом данного конфигурирования будет являться то, что после подключения к 80-му порту запрос будет автоматически перенаправляться на порт 443.

Также перенаправление можно выполнить средствами файла .htaccess (включив поддержку его использования в файле httpd.conf – директива AllowOverride All).

Примечание

В указанном выше варианте конфигурирования файла httpd.conf виртуальный хост для домена domain.com – первый в списке, а значит, являющийся виртуальным хостом по умолчанию. Следовательно, при указании в браузере IP адреса сервера (в данном случае, 10.10.10.10) будет отображаться содержимое корневого каталога domain.com. При переходе по всем доменам, направленным на данный IP адрес, также будет отображаться контент сайта domain.com. Для того, чтобы этого не произошло, в качестве первого виртуального хоста необходимо добавить хост по умолчанию:

<VirtualHost 10.10.10.10:80>
    ServerName *
    DocumentRoot /var/www/html/default
</VirtualHost>