Dockerize pgAdmin — токены CSRF не совпадают

Я пытался решить проблему, когда я пытаюсь войти в pgAdmin (в контейнере докеров) за прокси-сервером Nginx, я получаю сообщение об ошибке, что токены CSRF не совпадают.

Честно говоря, проблема связана с nginx или нет, я не уверен, но файлы конфигурации, как показано ниже:

Служба Docker Swarm:

pgAdmin:
 image: dpage/pgadmin4
 networks:
   - my-network
 ports:
   - 9102:80
 environment:
   - PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
   - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
   - PGADMIN_CONFIG_SERVER_MODE=True
 volumes:
   - /home/docker-container/pgadmin/persist-data:/var/lib/pgadmin
   - /home/docker-container/pgadmin/persist-data/servers.json:/pgadmin4/servers.json
 deploy:
  placement:
    constraints: [node.hostname == my-host-name]

Конфигурация Nginx:

server {

    listen 443 ssl;
    server_name my-server-name;

    location / {

            proxy_pass http://pgAdmin/;
            proxy_redirect off;
            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-CSRF-Token $http_x_pga_csrftoken;
    }

    ssl_certificate /home/nginx/ssl/certificate.crt;
    ssl_certificate_key /home/nginx/ssl/private.key;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_prefer_server_ciphers on;
    
server {

    listen 80;
    server_name my-server-name;
    return 301 https://my-server-name $request_uri;

 }

Я могу получить доступ к pgAdmin двумя способами:

  1. Первый способ — прямой IP-адрес хоста, например 172.23.53.2:9102.
  2. Второй способ — через прокси Nginx.

Когда я пытаюсь получить доступ к pgAdmin через прямой IP-адрес хоста, ошибки нет, но когда я пытаюсь получить доступ через DNS (например, my-server.pgadmin.com), я получаю сообщение об ошибке при входе в панель управления pgAdmin.

Ошибка:

Неверный запрос

Токены CSRF не совпадают.

Мое первое мнение об этой ошибке: nginx не передает заголовок токена CSRF в pgAdmin. По этой причине я много раз менял файл конфигурации nginx, но все равно получаю эту ошибку.

Что может быть источником этой ошибки и как я могу решить эту проблему?


person user3073480    schedule 10.12.2020    source источник
comment
Я забыл сказать, что Nginx также работает в контейнере Docker.   -  person user3073480    schedule 10.12.2020


Ответы (2)


Попробуйте использовать порты по умолчанию 5050:80. На моей стороне такая же проблема решена.

Также рекомендуется использовать строки.

Cf: https://docs.docker.com/compose/compose-file/compose-file-v3/#ports

person pierrz    schedule 02.05.2021

Я использовал pgadmin4, развернутый Apache httpd, метод развертывания аналогичен, у меня также была та же проблема, мое решение: Apache httpd загрузил библиотеку Apr/Aprl-util/pcre, Apache httpd будет использовать токен.

person time_north    schedule 16.12.2020