Симптомы: При доступе к http://192.168.1.100:8088/ появляется ошибка The CSRF session token is missing, но через доменное имя всё работает без проблем.
Браузер считает IP-адрес и доменное имя абсолютно разными сайтами. Куки сессии не передаются между ними, поэтому:
Если вам нужно просто запустить и забыть (например, для локальной разработки), добавьте в superset_config.py:
WTF_CSRF_ENABLED = False
WTF_CSRF_SSL_STRICT = False
Результат: После перезапуска контейнера всё заработало! Никаких ошибок, никаких танцев с бубном. Просто добавил эти две строчки и готово.
Важно: Это решение только для тестовой среды! В продакшене отключать защиту от атак межсайтовой подделки запросов — это как ходить по минному полю с завязанными глазами.
Если хотите сделать правильно, создайте отдельный контейнер-прокси, который будет принимать запросы по домену и перенаправлять их на суперсет:
# docker-compose.yml для прокси-контейнера
version: '3.7'
services:
superset-proxy:
image: nginx:alpine
container_name: superset_proxy_external
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro
networks:
- superset_network
networks:
superset_network:
external: true
name: superset_network
Конфигурация прокси:
# nginx/conf.d/superset.conf
server {
listen 80;
server_name superset.local dashboard.local;
location / {
proxy_pass http://superset_container:8088;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Критические ошибки в superset_config.py, которые ломают аутентификацию при использовании домена:
# ❌ Ошибки, которые нужно исправить:
SESSION_COOKIE_SECURE = True # Требует HTTPS!
PREFERRED_URL_SCHEME = "https" # Принудительно генерирует HTTPS-ссылки
WEBDRIVER_BASEURL = "https://dashboard.local/ " # Лишние пробелы в конце!
# ✅ Правильная конфигурация для HTTP:
SESSION_COOKIE_SECURE = False
PREFERRED_URL_SCHEME = "http"
WEBDRIVER_BASEURL = "http://dashboard.local/" # Без пробелов!
Объяснение: Параметр SESSION_COOKIE_SECURE = True заставляет браузер сохранять куки только при подключении по HTTPS. Если вы используете обычный HTTP, браузер просто игнорирует эти куки → сессия не сохраняется → вы всегда неавторизованы → вечный редирект на /login.
Добавьте в C:\Windows\System32\drivers\etc\hosts (Windows) или /etc/hosts (Linux):
192.168.1.100 superset.local
После этого очистите кэш:
ipconfig /flushdns
Примечание: В файле hosts нельзя указывать порты — только IP и доменное имя. Порт указывается в браузере отдельно.
Нет! Просто сохраните файл и выполните ipconfig /flushdns. Перезагрузка — это для тех, кто не знает командную строку. Всё работает сразу после очистки кэша.
Суперсет не видит куки сессии из-за неправильных настроек. Браузер не сохраняет куки → вы всегда неавторизованы → вечный редирект на /login. Исправьте конфиг и перезапустите контейнер командой docker-compose restart superset.
Технически да, но это создаст две разные сессии. Лучше выбрать один основной адрес и всегда использовать его. Если нужно и то, и другое — настройте прокси, который будет принимать запросы по обоим адресам.
Браузер → superset.local (порт 80)
↓
Nginx прокси → superset_container:8088
↓
Superset (с правильными настройками)
↓
✅ Куки работают → ✅ Сессия сохраняется → ✅ CSRF валиден
Если нужно быстро — просто отключите проверку:
WTF_CSRF_ENABLED = False
Если нужно правильно — настройте прокси и исправьте конфиг. В любом случае, проблема решается за 5 минут, если знать, куда смотреть.
На главную