use*_*480 7 nginx pgadmin docker csrf-token
我一直在尝试解决一个问题,即当我尝试登录 Nginx 代理后面的 pgAdmin(在 docker 容器中)时,出现 CSRF 令牌不匹配的错误。
请参阅https://en.wikipedia.org/wiki/Cross-site_request_forgery
坦率地说,问题是否与 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]
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
我可以通过两种方式访问 pgAdmin:
当我尝试通过直接主机 IP 访问 pgAdmin 时,没有错误,但是当我尝试通过 dns 访问(如 my-server.pgadmin.com )时,我在登录 pgAdmin 仪表板时收到错误。
错误是:
错误的请求。CSRF 令牌不匹配。
我对此错误的第一个看法是 nginx 没有将 CSRF 令牌标头传递给 pgAdmin。由于这些原因,我已经多次更改 nginx 配置文件,但仍然收到此错误。
这个错误的根源是什么?我该如何解决这个问题?
小智 0
我使用的是Apache httpd部署的pgadmin4,部署方法类似,我也遇到了同样的问题,我的解决方案是Apache httpd加载了Apr/Aprl-util /pcre的lib,Apache httpd将使用token。
| 归档时间: |
|
| 查看次数: |
9026 次 |
| 最近记录: |