Я пытаюсь настроить прокси с Nginx для Percona мониторинг и управление (PMM). Я использую их общедоступный демонстрационный сайт для тестирования.
Цель состоит в том, чтобы предоставить интерфейс PMM через URL-адрес, например https://localhost.local/pmm
.
server {
listen 443 default_server ssl http2;
server_name localhost;
ssl_certificate /etc/pki/tls/certs/localhost.crt;
ssl_certificate_key /etc/pki/tls/private/localhost.key;
location ^~ /pmm/ {
proxy_pass https://pmmdemo.percona.com/;
rewrite ^/pmm/(.*) /$1 break;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Authorization "";
}
}
Там - это несколько разных URL-адресов в серверном программном обеспечении.
Это в настоящее время НЕ работает правильно, и я вижу 404
запросы в консоли браузера для URL-адресов, например https://localhost/graph/public/build/grafana.dark.css?v5.0.4
Пытался добавить правило перезаписи: rewrite ^/pmm/(.*) /$1 break;
но это все равно не помогло.
Просмотр источника на демонстрационной странице PMM Percona показывает следующее:
<base href="/graph/" />
<link rel="stylesheet" href="public/build/grafana.dark.css?v5.0.4">
В совокупности это источник упомянутого вами URL-адреса 404. Таким образом, прокси работает правильно для начального запроса, просто последующие запросы получают 404, потому что они не направляются на прокси.
Идеальным решением было бы поменять <base href="/graph/"
к <base href="/pmm/graph"
, но поиск в Google показывает, что это может быть невозможно (Я вижу, вы нашли ту же тему.)
Возможно, лучше просто использовать другое имя хоста, например percona.local
. Это позволит вам использовать отдельный server
блок в Nginx, который ничего не делает, кроме проксирования всех запросов к вашему бэкэнду Percona. Тогда вам не придется беспокоиться о базовых URL, /graph/
, и т.д.
Затем, если вы планируете получить доступ к Percona только с локального компьютера, вы можете просто указать любое имя хоста, которое хотите 127.0.0.1
в твоем hosts
файл, и все хорошо. Если вам нужен какой-либо удаленный доступ, например интранет, тогда вам придется немного повозиться с DNS.
Я использовал код, подобный приведенному ниже, чтобы перенаправить веб-интерфейс за пределы докера, он также должен работать для вас.
upstream source {
server source:8081;
}
...
location /source/ {
proxy_pass http://source/;
proxy_set_header Authorization "";
}