繁体   English   中英

nginx:无法执行基于路径的路由

[英]nginx: unable to perform path based routing

我正在用prometheusgrafananginx创建一个grafana docker-compose堆栈。

我想提供基于主机的路由,以便/位置重定向到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;
    }

prometheusgrafana的服务受到90903000分别)

编辑

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" "-"

我相信rewrite ^/prometheus(.*) /$1 break; 子句导致重定向到/

nginx文档建议rewrite操作实际上针对请求的url执行一个正则表达式,并将其替换为其他内容。

在这种情况下/prometheus/由于正则表达式(.*)被解析为/ 此表达式的意思是匹配单词“ prometheus”之后的0个或更多字符,并捕获/存储被发现为变量$1任何字符。

因此,路径/prometheus被替换为/ ,从而将您带到Grafana服务器。

删除rewrite规则将解决您的问题。

参考:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM