Назад | Перейти на главную страницу

Как настроить Apache, чтобы некоторые веб-сайты в нескольких поддоменах всегда использовали https

Я понимаю, что есть много разных вариантов этого вопроса о сбое сервера, но мне не удалось объединить ответы, соответствующие нашей ситуации.

У нас есть веб-сервер CentOS 6.2, на котором запущен Apache 2.2, на котором размещены десятки веб-сайтов с одним и тем же родительским доменом - например, cat.example.com, bat.example.com, rat.example.com.

Мы хотели бы добавить https к некоторым (но не всем) из этих поддоменов. Поддомены https будут использовать https постоянно. Например http://bat.example.com перенаправит на https://bat.example.com

Мы приобрели лицензию Comodo на многодоменный сертификат SSL для SSL, которая позволяет нам создавать сертификаты для нескольких доменов. Веб-сервер имеет только один общедоступный IP-адрес.

Как нам настроить Apache для этого? Если запись виртуального хоста в httpd.conf для bat.example.com:

<VirtualHost *:80>
  ServerName bat.example.com
  DocumentRoot /var/www/sites/bat
  ErrorLog logs/bat-error_log
  CustomLog  logs/bat-access_log common
</VirtualHost>

Какие изменения необходимо внести, чтобы включить SSL на сайте bat.example.com и убедиться, что http://bat.example.com все еще действует, но перенаправляет на https://bat.example.com?

Сначала вам нужно настроить SSL VirtualHost, например:

<VirtualHost *:443>
  ServerName bat.example.com
  DocumentRoot /var/www/sites/bat
  ErrorLog logs/bat-error_log
  CustomLog  logs/bat-access_log common

  SSLEngine on
  SSLCertificateFile /path/to/cert
  SSLCertificateKeyFile /path/to/key
</VirtualHost>

На вашем виртуальном хосте без SSL вам потребуются некоторые директивы Rewrite для принудительного выполнения запросов к соответствующему виртуальному хосту SSL. Итак, дополнительные директивы к тому, что у вас есть, например:

   RewriteEngine on
   RewriteRule   ^/(.*)         https://bat.example.com/$1 [R,L]

Таким образом, все запросы к обычному виртуальному хосту HTTP будут перезаписаны на виртуальный хост SSL.