pgadmin4不会在nginx后面的特定位置工作

时间:2017-09-23 16:12:20

标签: nginx pgadmin-4

我遇到了一些麻烦: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;
}

我可能需要一些特定的重写吗?

3 个答案:

答案 0 :(得分:2)

这是pgAdmin4版本1.6中的一个错误,现已修复,将在下一版本中提供。

参考:Link

答案 1 :(得分:1)

对于版本pgAdmin 4 v3.0,在实际修复问题之前,这里有一个基于this的快速命令行 hack

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

答案 2 :(得分:1)

似乎不再需要此修复程序。

根据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: