pgadmin4 不会在 nginx 后面的特定位置工作
pgadmin4 wont work in specific location behind nginx
我遇到了一些麻烦:pgadmin 在位置 / 的 nginx 后面工作得很好,但它不会在位置 /pgadmin 后面工作
工作出色:
location / {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:5050;
}
不会工作:
location /pgadmin {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:5050;
}
可能我需要一些特定的重写?
这是 pgAdmin4 1.6 版中的错误,现已修复,将在下一个版本中提供。
参考:Link
对于版本 pgAdmin 4 v3.0, until the issue is actually fixed, here's a quick command-line hack based on this。
cat > quickfix.txt <<THE_END
class ReverseProxied(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
script_name = environ.get("HTTP_X_SCRIPT_NAME", "")
if script_name:
environ["SCRIPT_NAME"] = script_name
path_info = environ["PATH_INFO"]
if path_info.startswith(script_name):
environ["PATH_INFO"] = path_info[len(script_name):]
scheme = environ.get("HTTP_X_SCHEME", "")
if scheme:
environ["wsgi.url_scheme"] = scheme
return self.app(environ, start_response)
app.wsgi_app = ReverseProxied(app.wsgi_app)
THE_END
sudo sed -i '/app = create_app()/r quickfix.txt' /usr/local/lib/python3.5/dist-packages/pgadmin4/pgAdmin4.py
rm quickfix.txt
上面的命令将一段代码插入文件 /usr/local/lib/python3.5/dist-packages/pgadmin4/pgAdmin4.py
,就在行 app = create_app()
.
之后
此外,请确保系统上 pgAdmin4.py
的路径正确。您可能需要调整上面的代码段。
然后,配置nginx如下:
location /pgadmin-web/ {
proxy_pass http://127.0.0.1:5050/;
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-Forwarded-Proto $scheme;
proxy_set_header X-Script-Name /pgadmin-web;
}
作为参考,也可以查看 GitHub 上的 pgAdmin4.py。
似乎不再需要修复。
根据 Redmine 问题,可以使用 SCRIPT_NAME env var(至少使用最新的官方 docker 图像)。
Docker 撰写问题片段(为我工作):
version: "3"
services:
pgadmin4:
image: dpage/pgadmin4:latest
environment:
- PGADMIN_DEFAULT_EMAIL=bla@bla.com
- PGADMIN_DEFAULT_PASSWORD=thepwd
- SCRIPT_NAME=/pgadmin4
volumes:
- pgadm:/var/lib/pgadmin
labels:
- "traefik.enable=true"
- "traefik.backend=pgadmin4"
- "traefik.frontend.priority=600"
- "traefik.frontend.rule=Method:GET"
- "traefik.frontend.rule=PathPrefix:/pgadmin4"
postgis:
image: mdillon/postgis:9.6-alpine
volumes:
- pgdb:/var/lib/postgresql/data
expose:
- 5432
env_file:
- pg.env
labels:
- "traefik.enable=false"
volumes:
pgdb:
pgadm:
我遇到了一些麻烦:pgadmin 在位置 / 的 nginx 后面工作得很好,但它不会在位置 /pgadmin 后面工作 工作出色:
location / {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:5050;
}
不会工作:
location /pgadmin {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:5050;
}
可能我需要一些特定的重写?
这是 pgAdmin4 1.6 版中的错误,现已修复,将在下一个版本中提供。
参考:Link
对于版本 pgAdmin 4 v3.0, until the issue is actually fixed, here's a quick command-line hack based on this。
cat > quickfix.txt <<THE_END
class ReverseProxied(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
script_name = environ.get("HTTP_X_SCRIPT_NAME", "")
if script_name:
environ["SCRIPT_NAME"] = script_name
path_info = environ["PATH_INFO"]
if path_info.startswith(script_name):
environ["PATH_INFO"] = path_info[len(script_name):]
scheme = environ.get("HTTP_X_SCHEME", "")
if scheme:
environ["wsgi.url_scheme"] = scheme
return self.app(environ, start_response)
app.wsgi_app = ReverseProxied(app.wsgi_app)
THE_END
sudo sed -i '/app = create_app()/r quickfix.txt' /usr/local/lib/python3.5/dist-packages/pgadmin4/pgAdmin4.py
rm quickfix.txt
上面的命令将一段代码插入文件 /usr/local/lib/python3.5/dist-packages/pgadmin4/pgAdmin4.py
,就在行 app = create_app()
.
此外,请确保系统上 pgAdmin4.py
的路径正确。您可能需要调整上面的代码段。
然后,配置nginx如下:
location /pgadmin-web/ {
proxy_pass http://127.0.0.1:5050/;
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-Forwarded-Proto $scheme;
proxy_set_header X-Script-Name /pgadmin-web;
}
作为参考,也可以查看 GitHub 上的 pgAdmin4.py。
似乎不再需要修复。
根据 Redmine 问题,可以使用 SCRIPT_NAME env var(至少使用最新的官方 docker 图像)。
Docker 撰写问题片段(为我工作):
version: "3"
services:
pgadmin4:
image: dpage/pgadmin4:latest
environment:
- PGADMIN_DEFAULT_EMAIL=bla@bla.com
- PGADMIN_DEFAULT_PASSWORD=thepwd
- SCRIPT_NAME=/pgadmin4
volumes:
- pgadm:/var/lib/pgadmin
labels:
- "traefik.enable=true"
- "traefik.backend=pgadmin4"
- "traefik.frontend.priority=600"
- "traefik.frontend.rule=Method:GET"
- "traefik.frontend.rule=PathPrefix:/pgadmin4"
postgis:
image: mdillon/postgis:9.6-alpine
volumes:
- pgdb:/var/lib/postgresql/data
expose:
- 5432
env_file:
- pg.env
labels:
- "traefik.enable=false"
volumes:
pgdb:
pgadm: