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

时间:2019-01-17 10:44:54

标签: docker nginx

我正在使用docker-composeprometheusgrafana创建一个nginx堆栈。

我想提供基于主机的路由,以便将/位置重定向到grafana,将/prometheus重定向到prometheus

但是下面的nginx.conf会进行perofmrm /-> grafana重定向,但不会/prometheus-> prometheus重定向(后者转到{ {1}}错误页面)

有什么建议吗?

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是分别暴露给grafana9090的服务)

修改

3000

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

参考:

this github issue

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