Вопрос или проблема
WP мультисайтовая сеть на основе поддоменов, и привязка доменов к доменам клиентов без использования плагина (я использую WP 4.6.x).
На сервере установлен SSL-сертификат, так что основной домен сети отображается с зеленым замком — но я не обеспечиваю покрытие доменов клиентов — их принудительно переводят на http.
Мне нужно, чтобы все домены моих клиентов отображались по https с зеленым замком — без установки отдельного SSL-сертификата для каждого домена. Как лучше всего к этому подойти?
Итак, вот решение, которого я достиг. Оно будет варьироваться в зависимости от того, на каком сервере вы находитесь и что можете сделать в своем аккаунте хостинга (или на что согласится ваш хостинг-провайдер).
Я использую Apache и нахожусь в среде хостинга WHM / cPanel с выделенным IP-адресом и root-доступом. Основная идея должна работать и в других средах, но, как обычно, YMMV…
SNI должно быть включено и запущено в Apache.
Каждый домен должен быть покрыт SSL-сертификатом — подстановочный сертификат для основной сети покроет только поддомены, но не покроет сопоставленные домены.
Я добавил доменное имя(а) клиента как “дополнительный домен” в аккаунт для домена основной сети WP в cPanel. Обратите внимание, что для этого пришлось включить настройку "Разрешить создание припаркованных/дополнительных доменов, которые не зарегистрированы"
в WHM. В противном случае cPanel будет жаловаться: домен уже указывает на IP-адрес, который, похоже, не использует DNS-серверы, связанные с этим сервером.
Я также убедился, что автоSSL включен в WHM для аккаунта, которому принадлежит домен основной сети WP. Это вызывает установку SSL-сертификата для любых дополнительных доменов. автоSSL, похоже, основан на LetsEncrypt, так что если вы не можете использовать cPanel autoSSL, вы, вероятно, можете просто использовать LetsEncrypt.
У меня уже был приобретен подстановочный SSL-сертификат для домена основной сети, но приятно, что автоSSL учитывает этот сертификат и не пытается его заменить.
Наконец, я удостоверился, что в админке WP (network->sites->edit site) для сопоставленного домена в настройке siteURL указано https:// — и, конечно, убедился, что весь контент обслуживается по https, чтобы не возникало предупреждений о смешанном содержимом в браузере. В моем случае мне пришлось зайти в phpMyAdmin и вручную обновить таблицу опций для сайта. Мне еще надо выяснить, почему админ-страница не сохранила изменения, когда я изменил их там.
Теперь сайт(ы) моего клиента покрыты автоматическим обновляющимся бесплатным SSL, и открываются в браузере на всех страницах с зеленым замком.
Ответ или решение
Для решения задачи обеспечения HTTPS-защиты доменных имен клиентов в сети WordPress Multisite с использованием поддоменов и доменного маппинга без плагинов, необходимо учесть несколько специфических факторов и выполнить ряд технических шагов. Дадим подробное объяснение, основанное на доступной информации о вашем окружении и требованиях.
Теория
В вашей ситуации, управление несколькими доменами в WordPress Multisite, предполагает настройку SSL для каждого из этих доменов без использования отдельных сертификатов. Основная сложность заключается в том, что классический подход с использованием wildcard-сертификата для поддоменов не подходит для покрываемых доменных имен, которые маппируются на клиентские домены.
Пример
Вы описали свою серверную конфигурацию: вы используете Apache на сервере с управлением через WHM/cPanel и имеете выделенный IP-адрес с правами root. Одним из ключевых требований является поддержка SNI (Server Name Indication) на вашем Apache-сервере, что позволяет использовать один IP-адрес для нескольких SSL- сертификатов. Это важно потому, что на одном сервере может находиться множество доменов.
Еще одним инструментом для решения вашей задачи является autoSSL — возможность, предоставляемая cPanel, что позволяет автоматически выдавать и устанавливать сертификаты SSL для дополнительных доменов. Чаще всего autoSSL работает на основе бесплатного сертификата Let’s Encrypt, который автоматически обновляется. Этот метод интегрирования SSL хорошо подходит для динамического окружения с постоянным увеличением числа поддерживаемых доменов.
Применение
Чтобы внедрить решение, следуйте шагам:
-
Поддержка SNI в Apache: Убедитесь, что ваш Apache-сервер поддерживает SNI. В большинстве современных конфигураций это так по умолчанию, но вы можете это проверить в документации вашего сервера.
-
Добавление клиентских доменов через cPanel: Для каждого доменного имени клиента добавьте соответствующий домен как add-on domain в cPanel. Это требует настройку WHM для разрешения на создание дополнительных или паркованных доменов, которые уже имеют назначенный IP.
-
Включение autoSSL: В WHM убедитесь, что автоSSL включен для вашего аккаунта. Это позволит cPanel автоматически создавать и устанавливать SSL-сертификаты для всех добавленных доменов. В настройках WHM можно дополнительно проверить, что autoSSL настроен на работу с Let’s Encrypt, обеспечивая беспроблемное применение и обновление сертификатов.
-
Обновление настроек WordPress: В административной панели WordPress убедитесь, что смотритель сайтов имеет у всех доменов SiteURL, начинающийся с
https://
. Если изменения не подтверждаются напрямую через интерфейс администрирования, придется напрямую обновить базу данных через phpMyAdmin в таблицеwp_options
для каждого сайта. -
Проверка наполнения контента: Убедитесь, что весь контент, включая изображения и скрипты, обслуживается через HTTPS, чтобы избежать предупреждений о смешанном содержимом, которые могут мешать пользователям.
Благодаря описанным действиям, каждый клиентский сайт будет защищен автоматическим обновляемым SSL-сертификатом, обеспечивая сохранность данных клиентов и их доверие.
Следуя этой инструкции, вы сможете обеспечить безопасную коммуникацию для всех доменов вашей сети WordPress Multisite, без необходимости устанавливать отдельные SSL-сертификаты для каждого. Это не только упрощает процесс администрирования, но и снижает финансовые и временные затраты на поддержку инфраструктуры.