Nginx 位置匹配仅在匹配根时有效

Nginx 位置匹配仅在匹配根时有效

我正在尝试配置 nginx,以便可以拥有两个位置。一个用于我的节点 API,另一个用于我的 Jenkins CI。

http://my_ip/api应该指向我的节点服务器,http://my_ip/jenkins应该指向我的 jenkins CI

我有这个服务器块。

server {
listen 80;

server_name my_ip_address;

location /api {
    proxy_pass http://127.0.0.1:1234;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

location /jenkins {

   proxy_set_header        Host $host;
   proxy_set_header        X-Real-IP $remote_addr;
   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header        X-Forwarded-Proto $scheme;

   proxy_pass          http://localhost:8080;
   proxy_read_timeout  90;

}
}

该配置不起作用。但如果我使用与 root 匹配的任何位置,它就会起作用。

这没有问题。如果我仅使用节点 api 的位置块,情况也一样/

location / {

   proxy_set_header        Host $host;
   proxy_set_header        X-Real-IP $remote_addr;
   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header        X-Forwarded-Proto $scheme;

   proxy_pass          http://localhost:8080;
   proxy_read_timeout  90;

}

但如果我改变/它,/jenkins它就不再起作用了。

我知道我在这里缺少一些基本的知识,但我无法弄清楚这一点,因为我所看到的所有地方似乎都表明这应该可以正常工作。

答案1

好吧,在对这个问题进行更多的研究之后,我注意到该设置的问题在于位置 /api 没有连接到http://127.0.0.1:1234/它试图连接的位置,http://127.0.0.1:1234/api并且 jenkins 也是如此。

因此解决方案是在 location 和 proxy_pass 上添加尾部斜杠。

location /api/ {
    proxy_pass http://127.0.0.1:1234/;
....

location /jenkins/ {
   proxy_pass          http://localhost:8080/;
   proxy_read_timeout  90;

....

这种方法成功了。

相关内容