ispconfig3 apache+nginx не работает ssl

Недавно потребовалось установить нескольким сайтам ssl для обмена данными, однако не все так оказалось проcто. Ispconfig3 упорно не работал, чем меня поставил в тупик, а поиск в интернете не давал пищи для ума. Проведя несколько дней в тестах, оказалось есть серьезный баг с ssl во всех мануалах на основе моего и его подобным. Косяк нашелся в изменение шаблона генерации конфигов. Приводящий к неработоспособности ssl.

И поскольку баг было достаточно критичным, я не стал переписывать существующую статью, не нарушая целостность статьи, а вынес его в отдельной материал.

Суть бага в том, что изначальном мы кастомизируем шаблон генерации виртуального хоста явно изменяя значения ’port’ в /usr/local/ispconfig/server/conf-custom/vhost.conf.master на 82, однако не учитываем тот факт что при ssl не все так просто в /usr/local/ispconfig/server/plugins-enable/apache2_plurin.inc.php

$tmp_vhost_arr = array('ip_address' => $data['new']['ip_address'], 'ssl_enabled' => 0, 'port' => 80);
$tmp_vhost_arr = array('ip_address' => $data['new']['ip_address'], 'ssl_enabled' => 1, 'port' => '443');

И все у нас хорошо работает на нашем нестандартном порту, данном случае 82. До того момента когда мы желаем включить ssl, ведь порт не меняется, а жестко привязан.

На самом деле все логично ведь по изначальной логике listen 443 должен быть прописан в каждом <VirtualHost> отдельно и оно даже работало бы в nignx поскольку в самом servers {} можно определить какой порт мы желаем слушать, вот проблема в том, что apache2 сделан по другому и не может изменять прослушиваемый порт в <VirtualHost>. Такова специфика апач, вначале слушаем порт, потом виртуальные хосты. По сему приходится отказаться от кастомизации vhost.conf.master

И изменить жестко ключ массива в apache2_plurin.inc.php заменив порт 80 на нужный нам. У такого решения есть пара весомых преимуществ перед кастомизацией шаблона генерации.

  • Не приходится подстраивать мануал под новые версии шаблона, а при обновление ispconfig3 он может меняется.
  • Заменить параметр во всех php.ini от текущего каталога
  • Ключи массива не затираются и мы 100% гарантируем их валидность работы.
  • При обновление ispconfig3 нам потребуется запустить всего 1 команду для исправление накатившихся изменений.

У нас две задачи: удалить существующие кастомные конфиги, и модернизировать php файлы.

Бкап плагина apache2_plugin.inc.php

cp /usr/local/ispconfig/server/plugins-available/apache2_plugin.inc.php /usr/local/ispconfig/server/plugins-available/apache2_plugin.inc.php_old

Заменяем в плагине все 80 порты на 82

sed -i 's/[8][0][)]\;/82);/g' /usr/local/ispconfig/server/plugins-available/apache2_plugin.inc.php

Удаляем кастомный конфиг, если он у нас уже есть, ведь стандартный конфиг работает корректно.

mv /usr/local/ispconfig/server/conf-custom/apache_spconfig.conf.masert /usr/local/ispconfig/server/conf-custom/apache_spconfig.conf.maser.old

Бэкапим еще один плагин apps_vhost_plugin.inc.php

cp /usr/local/ispconfig/server/plugins-available/apps_vhost_plugin.inc.php /usr/local/ispconfig/server/plugins-available/apps_vhost_plugin.inc.php_old

Изменяем порт

sed -i 's/[=][=][ ][8][0][ ]/== 82 /g' /usr/local/ispconfig/server/plugins-available/apps_vhost_plugin.inc.php

Удаляем кастомный конфиг, если он у нас уже есть, ведь стандартный конфиг работает корректно.

mv /usr/local/ispconfig/server/conf-custom/vhost.conf.master /usr/local/ispconfig/server/conf-custom/vhost.conf.master

Проверить правильность результатов достаточно легко, все что нам требуется включить ssl на сайте и посмотреть поменяется и ли порт <VirtualHost 144.76.196.249:443>

Обращаю внимание, что при внимательном рассмотрение конфига и генератора вы найдете локейшен <IfModule mod_ssl.c> и он будет пуст, однако при подключение ssl весь конфиг дублируется два раза, и в низу конфиг повторяется второй раз уже в другом виртуальным хостом, и со своим <IfModule mod_ssl.c> ну и <VirtualHost 144.76.196.249:443. То есть при включенном ssl конфиг увеличивается в два раза. а не на 2 строчки.

Ну и самое главное. Поскольку мы видим что кастомизация порта не возможна, ни в админке и в недокументированных возможностях ispconfig нет возможности его включить, а как я раньше говорил apache не может слушать порт внутри VirtualHost и обязан принудительно висит на порту, то получается что 1 порт на 1 IP, а следовательно вы должны выдать каждому сайту с ssl отдельный IP

И самое главное, не забудьте теперь сайт привязан принудительно не к «*» а к IP и требуется изменить, А запись у самого домена, в противном случае счастье не наступит. Если же у вас нет возможности выдать сайту отдельный IP, то вам придется менять в сгенерированных конфигах все порты на нестандартные, и не вносить изменения в данный сайт через Ispconfig, любая галочка через isp будет перетирать ваши нестандартные порты. Ну и напоследок: не забывайте что у сайта появилось зеркало, поскольку он сейчас висит на IP, а яндекс их индексирует, не забудьте сделать редирект.

Оставить комментарий