我正在尝试配置 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;
....
这种方法成功了。