我正在尝试在 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
来自“外部”的端口)。否则反向代理组件很容易被绕过。