Мои проекты

Рабочий сайт: nginx, кеш и данные пользователей

Настраиваем доверие к прокси и проверяем границы доступа, не раскрывая приватные формы.

Урок 19 / 22 · Commentail 1.3.2

Перед открытием комментариев проверьте не только страницу на localhost, но и путь запроса через настоящий домен, HTTPS и прокси. Настройка ниже подходит лишь для схемы «публичный nginx → Django на loopback». Для CDN или нескольких прокси нужна проверка всей цепочки.

IP за одним nginx

Пример фрагмента существующей nginx-конфигурации:

nginx
# Example: nginx is the only public edge; Django listens on loopback.
location / {
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://127.0.0.1:8000;
}

В этом варианте nginx перезаписывает forwarded IP адресом реального клиента, а не доверяет заголовку, присланному посетителем. Django-порт не должен быть доступен снаружи. В settings:

python
COMMENTAIL = {"default": {"TRUSTED_PROXIES": ["127.0.0.1/32"]}}
# Set only when your controlled proxy overwrites this header and direct access is blocked.
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")

127.0.0.1/32 подходит только если именно этот адрес — фактический peer приложения. Для контейнера, Unix socket или удалённого балансировщика настройка будет другой. Не доверяйте 0.0.0.0/0 или ::/0. Не включайте SECURE_PROXY_SSL_HEADER, если не контролируете перезапись заголовка и прямой доступ к backend.

После изменения проверьте синтаксис nginx штатным способом и перезагрузите конфигурацию по процедуре сервера. Через реальный домен убедитесь, что два разных клиента получают свои IP-квоты и что поддельный X-Forwarded-For не подменяет адрес. manage.py check не проверяет реальную сетевую схему.

Кеширование

Формы, собственные ожидающие карточки и recent-списки зависят от пользователя. Сохраняйте CapabilityHeadersMiddleware и Cache-Control: private, no-store. Исключите эти ответы из общего page/CDN cache; Vary без корректной политики не делает общий кеш безопасным. Не используйте secret action URL как обычные ссылки аналитики.

Данные и доступ

Почта гостя не публикуется, но обрабатывается сайтом и выбранным почтовым сервисом. Внешняя CAPTCHA также передаёт данные провайдеру. Опишите фактическую обработку и сроки хранения для своего сайта; установка пакета сама по себе не определяет правовую политику.

Удаление учётной записи отменяет связанную почту/подписки и удаляет сохранённый адрес из комментариев; текст может остаться с обозначением удалённого автора. Опубликованные комментарии не исчезают автоматически по сроку временных токенов. Резервные копии и старые экспорты требуют собственной политики.

Приёмка

Проверьте два браузера, гостя и аккаунт, закрытую Page, другой Site, модерацию и правку; затем реальные темы, узкий экран, клавиатуру и допустимый no-JS путь. Отдельно пройдите почту от отправки до отписки. Следите за возрастом очереди и отказами worker, ограничивайте и очищайте логи от защищённых URL. Учебный runserver и DEBUG не переносите в production.

Другие уроки по этой задаче

Документация по теме

Была ли статья полезна?

Комментарии 0

Имя: до 40 символов.

После отправки мы пришлём письмо со ссылкой для подтверждения email.

Не более 5000 символов.

Опубликованных комментариев пока нет.