Запустите 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