Запись на память: случай с сервером onlyoffice.logo.ru
Проблема
У меня на сервере работал ONLYOFFICE Document Server под доменом onlyoffice.logo.ru. SSL-сертификат был получен вручную и лежал в /etc/ssl/onlyoffice/. Со временем сертификат начал подходить к концу, а автоматическое обновление не работало, да еще сертификат был скачан с другого сервера вручную. Автообновление даже если бы работало то не сработало бы на этот серт. Ну и ошибочка в конфиге, оба порта были в одном блоке server.
Почему? Потому что Let's Encrypt при обновлении требует доступ по HTTP (порт 80) для прохождения проверки HTTP-01 challenge. А у меня в Nginx был только блок на порту 443 — порт 80 либо не слушался, либо был неправильно настроен.
Решение
1. Разделить HTTP и HTTPS в Nginx
Нельзя держать listen 80 и listen 443 ssl в одном server-блоке — это ломает ACME-проверку. Нужно два отдельных блока:
- HTTP (порт 80) — только для редиректа и прохождения проверки Let's Encrypt.
- HTTPS (порт 443) — основной сервер с ONLYOFFICE.
2. Подготовить директорию для ACME-челленджа
sudo mkdir -p /var/www/onlyoffice/.well-known/acme-challenge
sudo chown -R www-data:www-data /var/www/onlyoffice
Это путь, куда Certbot будет класть временные файлы для подтверждения владения доменом.
3. Настроить Nginx
Пример корректного конфига (/etc/nginx/conf.d/ds.conf):
# HTTP — порт 80
server {
listen 80;
server_name onlyoffice.logo.ru;
location ^~ /.well-known/acme-challenge/ {
root /var/www/onlyoffice;
default_type "text/plain";
try_files $uri =404;
}
location / {
return 301 https://$server_name$request_uri;
}
}
# HTTPS — порт 443
server {
listen 443 ssl http2;
server_name onlyoffice.logo.ru;
ssl_certificate /etc/letsencrypt/live/onlyoffice.logo.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/onlyoffice.logo.ru/privkey.pem;
# ONLYOFFICE-специфичные настройки
set $secure_link_secret ваш_секрет;
include /etc/nginx/includes/ds-*.conf;
}
4. Получить сертификат через Certbot
sudo certbot certonly --webroot -w /var/www/onlyoffice -d onlyoffice.logo.ru
После этого Certbot:
- положит сертификат в
/etc/letsencrypt/live/onlyoffice.logo.ru/, - настроит автоматическое обновление,
- и добавит задачу в systemd/cron.
5. Обновить пути в Nginx и перезагрузить
sudo nginx -t
sudo systemctl reload nginx
Полезные команды
sudo certbot certificates— посмотреть список сертификатов.sudo certbot renew --dry-run— протестировать обновление.sudo certbot delete --cert-name имя— удалить ненужный сертификат (например, от другого сервера).systemctl list-timers | grep certbot— проверить автообновление.
Важно!
- Не используйте тестовый пример ONLYOFFICE (
ds-example) в продакшене — он не защищён. - Убедитесь, что порт 80 открыт в фаерволе (
ufw allow 80). - Если у вас несколько сервисов (Nextcloud, ONLYOFFICE и т.д.), держите их на разных серверах или чётко разделяйте конфиги — чтобы не обновлять чужие сертификаты.
Итог
Теперь мой ONLYOFFICE работает с валидным, автоматически обновляемым SSL-сертификатом от Let's Encrypt. Всё просто — если знать, что порт 80 обязателен для обновления, даже если сайт доступен только по HTTPS.
Let's Encrypt — бесплатно, автоматически, надёжно.
Комментарии
Пока нет комментариев. Будьте первым!