При работе с 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.