Панель предварительного просмотра администратора Wagtail admin не работает в рабочей среде
Предварительный просмотр страницы в Wagtail admin локально на моем сервере разработки работает нормально, но в рабочей среде предварительный просмотр не отображается, только вращающееся колесо. В консоли инструментов разработки Chrome я вижу сообщение об ошибке:
Uncaught SecurityError: Failed to read a named property 'scroll' from 'Window': Blocked a frame with origin "https://example.com" from accessing a cross-origin frame.
где я заменил свой реальный домен на "example.com".
В рабочей среде я использую Wagtail 6 с nginx и gunicorn, обслуживая мультимедийные и статические файлы с одного сервера.
Вот соответствующие части моей конфигурации nginx с некоторыми вычеркнутыми данными:
upstream app_server {
server unix:/opt/example-com/gunicorn.socket fail_timeout=0;
}
server {
listen 80;
server_name example.com;
rewrite ^/(.*) https://example.com/$1 permanent;
}
server {
listen 443 ssl;
server_name example.com;
client_max_body_size 50M;
ssl_certificate XXXX
ssl_certificate_key XXXX
location /static/ {
alias /opt/example-com/static/;
}
location /media/ {
alias /opt/example-com/media/;
}
location / {
include proxy_params;
proxy_pass http://unix:/opt/example-com/gunicorn.socket;
}
location /admin/ {
include proxy_params;
proxy_pass http://unix:/opt/example-com/gunicorn.socket;
}
}
В базовых настройках я установил
WAGTAILADMIN_BASE_URL = "https://example.com"
и на /admin/sites/
для имени хоста сайта задано значение "example.com".
Я не совсем понимаю, почему я вообще сталкиваюсь с этой проблемой межсайтового взаимодействия и как это исправить.
Я столкнулся с той же проблемой. Поскольку панель предварительного просмотра загружается внутри iframe, ее можно "решить", установив Параметры X-Frame.
Решение:
В вашем поле settings.py ИЛИ base.py добавьте следующее:
X_FRAME_OPTIONS = "SAMEORIGIN"
Ссылки:
https://docs.djangoproject.com/en/5.1/ref/clickjacking/
Соображения:
Осторожно!!. Это может снизить безопасность вашего сайта от атак с перехватом кликов.
Я был бы менее обеспокоен, если бы мы могли справиться с этим с помощью frame-ancestors вместо x_frame_options.
Также было бы здорово, если бы разработчики Wagtail добавили способ настройки этого с помощью декораторов django xframe.