При работе с PdfDing через веб-интерфейс весь обмен данными между пользователем и сервером проходит по HTTP-запросам, при помощи которых передаются загружаемые документы, параметры обработки и результаты. При использовании незащищённого подключения весь трафик идёт в открытом виде и может быть перехвачен. Кроме того, PdfDing построен на Django, где при включённых параметрах CSRF_COOKIE_SECURE и SESSION_COOKIE_SECURE корректная работа возможна только через HTTPS. В противном случае браузер не будет передавать необходимые cookie. Это может привести к ошибкам авторизации и проверки форм.
Браузеры также накладывают определённые ограничения. При работе без HTTPS браузер может выдавать предупреждения о небезопасности и блокировать некоторые ресурсы. Для устранения этих проблем используется SSL/TLS-шифрование с валидным сертификатом, например, от Let’s Encrypt. Настройка доступа по HTTPS обеспечивает безопасный обмен файлами, защиту cookie и корректное функционирование веб-приложения.
В статье разберём, как настроить доступ к PdfDing по HTTPS на виртуальном выделенном сервере, работающем под управлением Ubuntu 24.04.
Как настроить доступ к PdfDing по HTTPS
Во-первых, чтобы настроить доступ к сайту по HTTPS, необходимо владеть доменным именем. Причём это доменное имя должно быть привязано к IP-адресу узла, на котором расположен сайт. В нашем случае под сайтом мы понимаем веб-интерфейс PdfDing, под узлом – виртуальный выделенный сервер. Привязка имени домена к IP-адресу производится при помощи специальной DNS-записи, которая называется A-запись. Такую настройку можно сделать либо на сайте регистратора вашего домена, либо в личном кабинете RUVDS, где нужно перейти во вкладку Домены и добавить туда имя своего домена, привязав его к серверу, на котором установлен PdfDing.

Почему Nginx?
Одним из наиболее популярных способов настройки доступа через HTTPS является использование обратного прокси Nginx. Nginx сочетает в себе лёгкость и высокую производительность и способен обрабатывать большое количество соединений одновременно. Он умеет работать как прокси-сервер, принимая запросы на HTTPS и перенаправляя их к внутреннему приложению без необходимости изменять конфигурацию самого приложения. Nginx поддерживает установку и автоматическое обновление TLS-сертификатов от Let’s Encrypt для безопасного шифрования трафика. В сочетании с Docker это даёт простую и надёжную архитектуру, где PdfDing остаётся в контейнере, а Nginx обрабатывает весь внешний трафик. Таким образом обратный прокси фильтрует запросы и обеспечивает HTTPS, минимизируя нагрузку на приложение и снижая риски для безопасности.
При этом сам Nginx не умеет получать TLS-сертификаты и для организации HTTPS-соединения использует уже готовые. Поэтому для получения и автоматического обновления сертификатов применяется утилита Certbot. Именно она взаимодействует с центром сертификации Let’s Encrypt. Certbot выполняет проверку домена, генерирует приватный ключ и выпускает сертификат. После чего эти файлы подключаются в конфигурации Nginx.
Настройка брандмауэра
Для проверки домена через HTTP-01 challenge Certbot использует порт 80. Утилита временно размещает проверочный файл на веб-сервере, и центр сертификации Let’s Encrypt обращается к нему по HTTP, чтобы убедиться, что вы контролируете домен. Если проверка прошла успешно, Certbot получает сертификат и копирует его на сервер. После чего остаётся настроить Nginx на работу через HTTPS с использованием порта 443.
Таким образом, на данном этапе необходимо обеспечить возможность доступа к серверу по протоколам HTTP и HTTPS. Чтобы это сделать, в брандмауэр UFW добавьте для них разрешающие правила:
$ sudo ufw allow http
$ sudo ufw allow https
Установка сертификата через Certbot
Теперь установите в систему утилиту Certbot:
$ sudo apt install certbot
По окончании установки запустите процесс запроса и установки TLS-сертификата. В данной команде замените your-site-name.ru на доменное имя вашего сайта:
$ sudo certbot certonly --standalone -d your-site-name.ru
При выполнении своей работы утилита сначала попросит указать E-mail, который будет использоваться для уведомлений. Затем вы должны будете согласиться с условиями предоставления услуг, чтобы зарегистрироваться на сервере ACME – протокола, который использует Let’s Encrypt и другие центры сертификации для автоматической выдачи, продления и управления SSL/TLS-сертификатами. Далее необходимо согласиться с тем, что вы готовы поделиться своим адресом электронной почты с Electronic Frontier Foundation, партнёром-основателем проекта Let’s Encrypt и некоммерческой организацией, разрабатывающей Certbot. В результате утилита отправит запрос, и после успешного прохождения проверки в систему будет установлен сертификат.

Настройка обратного прокси
По окончании работы утилиты перейдите в рабочий каталог PdfDing:
$ cd ~/pdfding/
Затем остановите работающий контейнер PdfDing. При этом следующая команда полностью свернёт проект. В том числе удалит контейнеры и сети, созданные текущим docker-compose.yml. Сами данные, поскольку они находятся в томах, останутся на месте.
$ sudo docker compose down
После чего откройте для редактирования файл docker-compose.yml:
$ nano docker-compose.yml
В файл docker-compose.yml внесите следующие изменения:
- секцию
portsзамените наexpose, которая объявляет порты в контейнере, предназначенные для взаимодействия с другими контейнерами внутри одной сети Docker Compose без их проброса на хост; - в параметрах
HOST_NAMEиALLOWED_HOSTSукажите доменное имя сайта, но не IP-адрес; - установите в
TRUEзначения параметровCSRF_COOKIE_SECUREиSESSION_COOKIE_SECURE, относящихся к настройке cookie в веб-приложениях, в частности, в Django, на котором работает PdfDing, и отвечают за безопасность при работе через HTTPS.
services:
pdfding:
container_name: pdfding
image: mrmn/pdfding:latest
restart: unless-stopped
expose:
- "8000"
environment:
- DEFAULT_THEME=dark
- DEFAULT_THEME_COLOR=blue
- SECRET_KEY=abcdef...890
- HOST_NAME=your-site-name.ru
- ALLOWED_HOSTS=your-site-name.ru,localhost,127.0.0.1
- CSRF_COOKIE_SECURE=TRUE
- SESSION_COOKIE_SECURE=TRUE
volumes:
- sqlite_data:/home/nonroot/pdfding/db
- media:/home/nonroot/pdfding/media
nginx:
image: nginx:stable-alpine
container_name: nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- /etc/letsencrypt:/etc/letsencrypt:ro
depends_on:
- pdfding
volumes:
sqlite_data:
media:
Дополнительно добавьте в файл секцию для контейнера с именем nginx, где:
image: nginx:stable-alpine– означает, что в качестве основы в контейнере используется лёгкий и стабильный образ Nginx на базе Alpine Linux;container_name: nginx– задаёт имя контейнера для обращения к нему через Docker Compose;restart: unless-stopped– определяет, что контейнер будет автоматически перезапускаться, кроме случаев его остановки вручную;ports: - "80:80" - "443:443"– описывает проброс портов 80 и 443 с хоста в контейнер, чтобы Nginx мог принимать HTTP и HTTPS-запросы извне;./nginx.conf:/etc/nginx/nginx.conf:ro– данный параметр из секцииvolumesотвечает за подключение локального конфигурационного файла Nginx внутрь контейнера в режиме только для чтения;/etc/letsencrypt:/etc/letsencrypt:ro– тоже параметр из секцииvolumes, который монтирует каталог с сертификатами SSL для того, чтобы Nginx мог их использовать, и также в режиме только для чтения;depends_on: - pdfding– гарантирует, что контейнер PdfDing будет запускаться перед запуском контейнера Nginx для корректной работы проксирования.
Настройка конфигурации обратного прокси Nginx
Закройте файл docker-compose.yml, сохранив внесённые изменения, после чего в текущем каталоге создайте конфигурационный файл Nginx:
$ nano nginx.conf
В нашем примере конфигурация Nginx как обратного прокси выглядит так:
events {}
http {
server {
listen 80;
server_name your-site-name.ru;
location / {
proxy_pass http://pdfding:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 443 ssl;
server_name your-site-name.ru;
ssl_certificate /etc/letsencrypt/live/your-site-name.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-site-name.ru/privkey.pem;
location / {
proxy_pass http://pdfding:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
Здесь:
events {}– обязательный блок Nginx, который управляет обработкой соединений (в данном случае используется минимальная стандартная конфигурация);- первая секция
serverотвечает за работу с HTTP-запросами:listen 80– слушает запросы на порту 80 для доменаyour-site-name.ru(директиваserver_name);proxy_pass http://pdfding:8000– все входящие запросы перенаправляются к контейнеруpdfdingна порт 8000;proxy_set_header– данные директивы передают реальный хост и IP-адрес клиента, чтобы веб-приложение видело корректную информацию о запросе;
- вторая секция
serverотвечает за работу с HTTPS-запросами:listen 443 ssl– слушает HTTPS-запросы на порту 443, так же для доменаyour-site-name.ru(директиваserver_name);ssl_certificateиssl_certificate_key– параметры содержат пути к сертификату и закрытому ключу для шифрования соединений;proxy_pass http://pdfding:8000иproxy_set_header– директивы проксируют запросы кpdfding:8000, передавая заголовкиHostи реальный IP-адрес клиента.
Проверка доступа по HTTPS
По окончании работы с файлом закройте его с сохранением и запустите контейнеры, описанные в docker-compose.yml:
$ sudo docker compose up -d
Вывести на экран их текущее состояние можно командой:
$ sudo docker ps
В столбце STATUS должно быть значение Up.

Если контейнеры работают, откройте браузер и перейдите на https://your-site-name.ru, где вместо your-site-name.ru укажите доменное имя своего сайта PdfDing.

Сообщение вида Подключение защищено в навигационной строке браузера говорит о том, что доступ к веб-интерфейсу приложения теперь осуществляется с использованием протокола HTTPS.