VestaCP — это отличный open-source панель управления, которая набирает популярность среди владельцев сайта, так как с помощью нее можно легко управлять сайтами (например, как вы это делаете на хостинге). Особенно ее удобство проявляется когда у вас есть свой сервер и не хочется платить деньги за платную панель управления или делать все настройки через командную строку.
Проблема
Я пытался настроить поддержу HTTP для сайта расположенного на этой панели и столкнулся с ошибкой, «Error code: 4» и потом она превратилась в «Error code: 3». В поисках решения этой проблемы я решил погуглить, но ничего не нашел. Я даже обратился на официальный форум, но не получил ответа.
Вскоре, я решил попробовать погуглить еще и наткнулся на ряд статей. Изначально я не знал, что Let’s Encrypt встроена в панель по умолчанию и вам нужно лишь поставить галочку для домена и сохранить и у вас готов HTTPS для сайта. Но я об этом не знал и установить сертификат вручную. Кстати, не советую делать это автоматически, лучше воспользуйтесь способом, который я буду описывать ниже.
Общая информация
- Я работал на Ubuntu 14.04 trusty.
- Версия ПУ VestaCP 0.9.8
- У меня уже были сгенерированные ключи от Let’s Encrypt.
- Если у вас ключей еще нет, то читайте «Получение сертификата».
- Если он у вас есть, то пропустите «Получение сертификата» и сразу читайте «Вставляем ключи».
Получение сертификата
Если у вас сертификата еще нет, то советую сделать следующее.
Сначала перемещаемся в директорию tmp
. Делаем клон директории, которая поможет установить сертификат в полуавтоматическом режиме. Заходим в папку letsencrypt
. Останавливаем nginx и на последней строчке задаем параметры для создания и настройки сертификата.
cd /tmp/ git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt service nginx stop ./letsencrypt-auto certonly --standalone -d yourdomain.ru -d www.yourdomain.ru
Вместе yourdomain.ru
пишите ваш домен (для которого нужен сертификат).
После последней консольной команды, вам нужно прочитать правила, ввести свою почту и всю остальную информацию, которая у вас запросится. И потом запустить nginx.
service nginx start
Вставляем ключи
Далее зайдите в VestaCP панель, в сайты, выберите домен и нажмите на SSL поддержку.
В консоли нужно переместиться в директорию где хранятся ключи, которые нужно ввести в VestaCP панели.
cd /etc/letsencrypt/live/yourdomain.ru/
Всего нам понадобится ключи из трех файлов.
Чтобы получить данные из файла, вам нужно написать например, nano cart.pem
.
Чтобы выйти из файла нажмите Ctrl+X, введите Y и нажмите Enter.
- В первое поле «SSL сертификат» вводим ключ из
cert.pem
. - Во второе поле вводим «SSL ключ» из
privkey.pem
. - И в третье поле вводим ключ из
chain.pem
.
Ошибка nginx
Если при запуске nginx фейлится и выводится ошибка следующего вида:
Starting nginx: nginxnginx: [emerg] bind() to [::]:80 failed (98: Address already in use) nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) nginx: [emerg] still could not bind()
То вам нужно обратить внимание на этот комментарий на GitHub.
Перевод комментария и ниже решение под ним.
Я закомментировал 3 IP адреса которые использовали порт 443 в файле «/etc/apache2/ports.conf», перезагрузил apache и nginx, и все заработало.
Я не совсем понимаю почему в файле «ports.conf» были эти записи, но похоже видимо они все равно ничего не делали.
Вам же я советую сделать тоже самое.
nano /etc/apache2/ports.conf
- И добавить «#» (без кавычек) перед каждым IP
- Сохранить файл.
- Перезапускаем nginx и apache2.
sudo service nginx restart && sudo service apache2 restart
Если при перезагрузке nginx и apache не показало ошибок — значит все прошло успешно.
Послесловие
Решение этой проблемы очень простое, но чтобы найти как ее решить было сложно и для этого я потратил не один час. Надеюсь она помогла вам сократить время поиска.