我正在尝试设置 nginx,以便我设置的基于 Hadoop 的集群的名称节点能够根据 URL 上的文件扩展名有效地重定向到围绕 Hadoop 的不同用户界面。为简单起见,假设
firstnode.com 对应于我的集群的主节点
stormnode.com 对应于运行 storm 的节点,并且可以通过端口 8080 访问 UI。那么,理想的重定向应该是http://firstnode.com/storm->http://stormnode.com:8080。
我尝试编辑我的 Nginx 配置文件,最终得到如下内容:
server{
listen 80;
server_name firstnode.com;
location /storm{
proxy_pass secondnode.com:8080;
}
}
也
server{
listen 80;
server_name firstnode.com;
location /storm{
return 301 $scheme://secondnode.com:8080$request_uri;
}
}
以及使用正则表达式的等价语句。不幸的是,我得到的最接近的结果是将 firstnode.com/storm 重定向到 secondnode.com:8080/storm。我非常感谢任何关于如何通过 nginx 的配置文件重写 URL,而不将文件扩展名/路径(又名 /storm)传递给新的 URL。
答案1
尝试这个:
server {
listen 80;
server_name firstnode.com;
location ~ ^/storm(?<section>.*)$ {
return 301 $scheme://secondnode.com:8080$section;
}
}
这里我们将之后的部分捕获/storm
到变量中section
,然后在return
语句中使用该变量来形成所需的路径。