在反向代理后运行 Pgadmin4

在反向代理后运行 Pgadmin4

我正在尝试在 Nginx 反向代理后面运行 pgadmin4,但是我遇到了一个问题,因为我需要 pgadmin 知道它位于 myhost.com/pgadmin 而不是简单地位于 myhost.com......或者至少我认为这是问题所在。

在其他 Web 应用程序中,通常会有一些称为 webroot 或类似的设置来指定它应该认为自己位于那里,但我找不到 pgadmin4 类似的东西。

这个设置是否存在?如果存在,它在哪里?

如果没有的话,有解决方法吗?

答案1

根据https://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html您应该添加一个请求标头。假设您将 pgAdmin4 放在 /pgadmin4 下,而不是 /

  • Nginx的:proxy_set_header X-Script-Name /pgadmin4;
  • Apache HTTPD:RequestHeader set X-Script-Name /pgadmin4

答案2

你在这里遇到的核心问题是pgadmin4后端高度敏感传递给它的 URI。它也是静态配置的,因此我们无法向 URI 添加“前缀”来指示如何处理它。

因此,由于我们无法改变pgadmin4在前端提供服务的“路径”,我们必须采取更邪恶的途径,将其作为子域提供服务 -pgadmin.domain.tld并使用相应的 SSL 证书。

nginx 配置位如下:

server {
    listen 80;

    server_name pgadmin.domain.tld;

    # Redirect any non-HTTPS requests to HTTPS (aka: Force HTTPS)
    return 301 https://pgadmin.domain.tld$request_uri;
}

server {
    listen 443 ssl;

    # SSL Config goes here, but the bare minimum is this:
    ssl_certificate /path/to/ssl/cert/with/fullchains.pem;
    ssl_certificate_key /path/to/privkey.pem;

    location / {
        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 https;
        proxy_pass http://127.0.0.1:5050;
    }
}

这假设您已经拥有或知道如何获取 SSL 证书以将其应用于配置中。但这超出了问题的范围。

不幸的是,这是让 pgadmin4 与“反向代理”配合使用的最简单的解决方案,但您无法在现有站点的位置块内轻松实现这一点。人们已经要求这样做好几年了,但从未开发过。

只需确保您还强化了服务器并关闭不应直接访问的端口(例如pgadmin4来自“外部”的端口)。否则反向代理组件很容易被绕过。

相关内容