如何在Nginx位置默认文件中编写正则表达式来Mapport到proxy_pass?

oalqel3c  于 2023-02-07  发布在  Nginx
关注(0)|答案(1)|浏览(135)

我已经经历了太多关于stackoverflow的答案,但不能弄清楚如何为我的需求编写regex。
在我的http://server/xyz/1234/1233/8080/中,我使用了以下正则表达式位置将上面的http://server/xyz/1234/1233/8080/重定向到127.0.0.1:8080,但它给我404未找到错误。
我正在默认文件中写入此位置块。

location ~ ^/xyz/([0-9]+)/([0-9]+)/([0-9]+)/
 {
    rewrite ^/xyz/([0-9]+)/([0-9]+)/(.*)/$ break;
    proxy_pass http://localhost:$1;
    proxy_set_header Host $host;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection upgrade;
 }

我不知道我哪里做错了,因为我已经像说的那样用了

*^, $-分别表示行的开始和结束。
*(.*)-表示第一个匹配所有内容的捕获组。

wrrgggsh

wrrgggsh1#

rewrite指令中有三个捕获组:

^/xyz/([0-9]+)/([0-9]+)/(.*)/$
      ↑        ↑        ↑
      first    second   third

但是你尝试使用第一个组作为上游端口。无论如何,这里你不需要任何rewrite规则。你只需要在location中声明命名的组,并使用match作为nginx变量,如下所示:

location ~ ^/xyz/([0-9]+)/([0-9]+)/(?<my_port>[0-9]+)/$ {
    proxy_pass http://localhost:$my_port;
}

相关问题