Назад | Перейти на главную страницу

Nginx: расположение с proxy_pass, включая uri (Percona PMM)

Я пытаюсь настроить прокси с 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.

Прохождение из NGINX

Я использовал код, подобный приведенному ниже, чтобы перенаправить веб-интерфейс за пределы докера, он также должен работать для вас.

Изменения конфигурации

upstream source {
    server source:8081;
}

...

location /source/ {
    proxy_pass   http://source/;
    proxy_set_header Authorization "";
}