nginx: невозможно выполнить маршрутизацию на основе пути - PullRequest
0 голосов
/ 17 января 2019

Я создаю стек docker-compose с prometheus, grafana и nginx.

Я хочу предоставить маршрутизацию на основе хоста, чтобы местоположение / перенаправлялось на grafana и /prometheus на prometheus.

Тем не менее, nginx.conf, приведенный ниже, выполняет перенаправление perofmrm / -> grafana, но не /prometheus -> prometheus (позднее перейдет на страницу ошибки grafana)

Есть предложения?

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;


    server_name _;


    location /prometheus  {
        rewrite ^/prometheus(.*) /$1 break;
        proxy_pass http://11.12.12.31:9090;
    }

    location / {    
        proxy_pass http://11.12.12.31:3000;
    }

(prometheus и grafana - услуги, для которых 9090 и 3000 соответственно)

редактировать

nginx_1          | 199.99.99.67 - - [17/Jan/2019:11:10:51 +0000] "GET /prometheus HTTP/1.1" 302 29 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"
grafana_1        | t=2019-01-17T11:10:51+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/graph status=404 remote_addr=192.168.96.1 time_ms=8 size=25545 referer=
nginx_1          | 199.99.99.67 - - [17/Jan/2019:11:10:51 +0000] "GET /graph HTTP/1.1" 404 25581 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"

1 Ответ

0 голосов
/ 18 января 2019

Я считаю, что предложение rewrite ^/prometheus(.*) /$1 break; вызывает перенаправление на /.

Документация nginx предполагает, что операция rewrite фактически выполняет регулярное выражение для запрошенного url и заменяет его чем-то другим.

В этом случае /prometheus/ разрешается как / из-за регулярного выражения (.*). Это выражение означает совпадение 0 или более символов после слова «прометей» и захват / сохранение любых символов, найденных в качестве переменной $1.

Таким образом, путь /prometheus был заменен на /, который приводит вас на сервер Grafana.

Удаление правила rewrite исправит вашу проблему.

Справка:

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

https://regex101.com/r/vjbFdN/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...