Запустите Pgadmin4 за обратным прокси

Я пытаюсь запустить pgadmin4 за обратным прокси-сервером Nginx, но у меня проблема, потому что мне нужно, чтобы pgadmin знал, что это на myhost.com/pgadmin, а не просто на myhost.com.... или, по крайней мере, я так думаю это проблема.

В других веб-приложениях обычно есть какая-то настройка, называемая webroot или что-то в этом роде, для обозначения того, что она должна находиться там, но я не могу найти ничего подобного для pgadmin4.

Существует ли этот параметр, если да, то где он?

Если нет, есть ли обходной путь?

1 ответ

Решение

Основная проблема, с которой вы столкнулись, заключается в том, что pgadmin4 backend очень чувствителен к передаваемым 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 порт из "снаружи"). В противном случае обратный прокси-компонент можно легко обойти.

Согласно 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
Другие вопросы по тегам