Nginx位置匹配只在匹配root时才起作用

我正在尝试configurationnginx,所以我可以有两个位置。 一个用于我的节点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; } } 

该configuration不起作用。 但是,如果我使用任何与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它不再工作。

我知道我在这里错过了一些基本知识,但我无法弄清楚,因为无论我看起来似乎表明应该工作正常。

那么,经过对这个问题的一些更多的研究,我已经注意到,该设置的问题是该位置/ api没有连接到http://127.0.0.1:1234/它试图连接到http://127.0.0.1:1234/api和jenkins一样。

所以解决方法是将尾部斜杠添加到位置和proxy_pass。

 location /api/ { proxy_pass http://127.0.0.1:1234/; .... location /jenkins/ { proxy_pass http://localhost:8080/; proxy_read_timeout 90; .... 

所以这个伎俩。