# Описываем группу серверов, куда Nginx будет перекидывать запросы. # 'web' — это имя сервиса из нашего docker-compose.yml. upstream django_app { server web:8000; } server { # Слушаем стандартный 80-й порт (HTTP). listen 80; # Список имен, на которые будет откликаться сервер. # Если зайти по другому IP, Nginx может выдать ошибку. server_name shiftflow.tertelius.space 192.168.1.108 localhost; # Увеличиваем лимит загрузки (по умолчанию в Nginx всего 1МБ). # 100М — чтобы ты мог спокойно грузить тяжелые чертежи или фото станков. client_max_body_size 100M; # Включаем Gzip-сжатие. Nginx будет сжимать текстовые файлы перед отправкой, # что ускорит загрузку интерфейса, особенно на слабом интернете. gzip on; gzip_types text/plain text/css application/json application/javascript text/xml; # Главный блок: всё, что не статика, летит в Django. location / { proxy_pass http://django_app; # Передаем оригинальный домен/IP (нужно для ALLOWED_HOSTS в Django). proxy_set_header Host $host; # Передаем реальный IP пользователя (чтобы в логах видеть, кто зашел). proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Передаем протокол (http или https). # КРИТИЧНО для CSRF защиты, чтобы Django не ругался при входе в админку. proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; } # Раздача статики (CSS, JS, картинки интерфейса). # Nginx сам лезет в папку, не беспокоя Django — это очень быстро. location /static/ { # Путь ВНУТРИ контейнера Nginx (куда мы примонтировали волюм). alias /app/staticfiles/; # Заставляем браузер кэшировать стили на 30 дней, чтобы не качать их каждый раз. expires 30d; add_header Cache-Control "public, no-transform"; } # Раздача медиа-файлов (чертежи, фото продукции). location /media/ { alias /app/media/; expires 30d; add_header Cache-Control "public, no-transform"; } }