[英]nginx: unable to perform path based routing
我正在用prometheus
, grafana
和nginx
创建一个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;
}
( 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" "-"
我相信rewrite ^/prometheus(.*) /$1 break;
子句导致重定向到/
。
nginx
文档建议rewrite
操作实际上针对请求的url
执行一个正则表达式,并将其替换为其他内容。
在这种情况下/prometheus/
由于正则表达式(.*)
被解析为/
。 此表达式的意思是匹配单词“ prometheus”之后的0个或更多字符,并捕获/存储被发现为变量$1
任何字符。
因此,路径/prometheus
被替换为/
,从而将您带到Grafana
服务器。
删除rewrite
规则将解决您的问题。
参考:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.