Files
2024-test-rosmorport/config/nginx/pet-clones--external-nginx.conf

122 lines
7.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# == Конфикурационный файл config/nginx/pet-clones--external-nginx.conf ==
# Внешний nginx конфиг для проксирования к контейнеру petclones-site--backend
# Это конфиг для ХОСТА (не внутри контейнера)
# Upstream (группировка backends) для проксирования запросов в Django контейнер
upstream petclones-backend {
# Контейнер слушает на 127.0.0.1:8040 согласно docker-compose.prod.yml
server 127.0.0.1:8040;
# Сохраняем persistent соединения (требует proxy_http_version 1.1 и proxy_set_header Connection "")
keepalive 32;
}
# Основной server блок для обработки HTTP запросов
server {
# Слушаем на стандартном HTTP порту (80) для IPv4 и IPv6
listen 80;
listen [::]:80;
server_name pet-clones.cube2.ru;
# Редирект HTTP → HTTPS (будет активирован после добавления SSL сертификата через certbot)
# Раскомментируй эту строку после получения SSL сертификата:
# return 301 https://$server_name$request_uri;
# Логирование запросов и ошибок для этого виртуального хоста
access_log /var/log/nginx/petclones.access.log;
error_log /var/log/nginx/petclones.error.log warn;
# ОСНОВНОЙ БЛОК ПРОКСИРОВАНИЯ
# Все запросы, кроме перехвачённых специфичными location'ами, проксируются сюда
location / {
# Проксируем все запросы в upstream контейнер
proxy_pass http://petclones-backend;
# --- ЗАГОЛОВКИ ДЛЯ КОРРЕКТНОЙ РАБОТЫ ПРИЛОЖЕНИЯ ---
# Передаём оригинальный хост (важно для правильной работы Django и генерации URLs)
proxy_set_header Host $host;
# Передаём оригинальный IP клиента (для логирования и rate-limiting)
proxy_set_header X-Real-IP $remote_addr;
# Добавляем этот прокси в цепь X-Forwarded-For (если было несколько проксей)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Передаём оригинальный протокол (HTTP или HTTPS) - важно для правильной работы redirect'ов
proxy_set_header X-Forwarded-Proto $scheme;
# Передаём оригинальный хост (может отличаться от Host если используется load balancer)
proxy_set_header X-Forwarded-Host $server_name;
# Передаём порт если не стандартный
proxy_set_header X-Forwarded-Port $server_port;
# --- HTTP KEEP-ALIVE ДЛЯ ПРОИЗВОДИТЕЛЬНОСТИ ---
# Используем HTTP 1.1 для поддержки keep-alive
proxy_http_version 1.1;
# Очищаем Connection header (иначе будет "Connection: close")
proxy_set_header Connection "";
# --- ТАЙМАУТЫ ДЛЯ ДЛИТЕЛЬНЫХ ЗАПРОСОВ ---
# Время ожидания подключения к backend
proxy_connect_timeout 60s;
# Время ожидания отправки запроса на backend
proxy_send_timeout 60s;
# Время ожидания ответа от backend (может быть увеличено если есть долгие запросы)
proxy_read_timeout 60s;
# --- БУФЕРИЗАЦИЯ ОТВЕТОВ ---
# Включаем буферизацию (nginx буферизирует ответ перед отправкой клиенту)
# Это экономит память backend если клиент медленный
proxy_buffering on;
# Размер буфера для первой части ответа (заголовки)
proxy_buffer_size 4k;
# Количество и размер буферов для основного тела ответа
proxy_buffers 8 4k;
}
# КЭШИРОВАНИЕ СТАТИЧЕСКИХ ФАЙЛОВ
# Кэшируем: HTML, изображения, стили, скрипты, шрифты и иконки
# ВАЖНО: WhiteNoise уже сжимает статику в контейнере (Gzip в nginx не нужен)
location ~* \.(htm|html|gif|png|jpe?g|svg|ico|css|js|woff|woff2|ttf|eot)$ {
# Проксируем запрос к backend (статика часть контейнера)
proxy_pass http://petclones-backend;
# Передаём хост в заголовке
proxy_set_header Host $host;
# --- КЭШИРОВАНИЕ В БРАУЗЕРЕ КЛИЕНТА ---
# Если файлы имеют хеш в названии (например: app.abc123.js), то cache-control может быть очень долгой
# "immutable" говорит браузеру что файл никогда не изменится (если изменится, то будет другой хеш)
add_header Cache-Control "public, max-age=2592000"; # 30 дней в секундах (30*24*60*60)
}
# КЭШИРОВАНИЕ МЕДИА ФАЙЛОВ
# Медиа загруженные пользователями кэшируются меньше чем статика (на случай удаления или обновления)
location ~* ^/media/.*\.(jpg|jpeg|png|gif|webp|svg|pdf|mp4|webm)$ {
proxy_pass http://petclones-backend;
proxy_set_header Host $host;
# Кэшируем на 30 дней (можно менять в зависимости от политики)
add_header Cache-Control "public, max-age=604800, immutable"; # 7 дней в секундах (604800 = 7*24*60*60)
}
}
# HTTPS SERVER БЛОК (ДОБАВИТЬ ПОСЛЕ ПОЛУЧЕНИЯ SSL СЕРТИФИКАТА)
# После получения SSL сертификата через certbot, раскомментируй и настрой эту секцию:
#
# server {
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
# server_name pet-clones.cube2.ru;
#
# # SSL сертификаты от certbot
# ssl_certificate /etc/letsencrypt/live/pet-clones.cube2.ru/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/pet-clones.cube2.ru/privkey.pem;
#
# # Параметры безопасности SSL
# ssl_protocols TLSv1.2 TLSv1.3;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # остальная конфигурация идентична HTTP блоку выше...
# # (копируешь content из server блока выше и вставляешь сюда)
# }
#
# ТАКЖЕ НЕ ЗАБУДЬ:
# 1. Установи certbot: sudo apt-get install certbot python3-certbot-nginx
# 2. Получи сертификат: sudo certbot certonly --standalone -d pet-clones.cube2.ru
# 3. Перезагрузи nginx: sudo systemctl restart nginx