Nginx反向代理到两个服务

Nginx反向代理到两个服务,nginx,Nginx,我正在运行nodeJS脚本 在localhost:9001上 它正在nginx反向代理后面运行 它接受/v{{{version}/{{lang}}/.. 例如: domain.com/api/v1/en/news domain.com/api/v2/fr/news domain.com/api/v3/en/news 直到现在我才知道这是nginx location /api/ { proxy_set_header X-Real-IP $remote_addr; p

我正在运行nodeJS脚本

  • localhost:9001上
  • 它正在nginx反向代理后面运行
  • 它接受
    /v{{{version}/{{lang}}/..
例如:

  • domain.com/api/v1/en/news
  • domain.com/api/v2/fr/news
  • domain.com/api/v3/en/news
直到现在我才知道这是nginx

  location /api/ {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   Host      $http_host;
    proxy_pass         http://localhost:9001/;
  }
一切正常

我现在的目标是在
localhost:9002
上运行额外的(相同的)脚本,它将接受
v4
请求。和
v3
v2
v1
仍将由
localhost:9001

所以我希望请求
domain.com/api/v4/en/news
被路由到
localhost:9002

我把这个放在当前规则上面,就像这样

location ~* /api/v4/(.*)$ {
  proxy_set_header   X-Real-IP $remote_addr;
  proxy_set_header   Host      $http_host;
  proxy_pass         http://localhost:9002/v4/$1;
}

location /api/ {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   Host      $http_host;
    proxy_pass         http://localhost:9001/;
  }

请求
/v3/。
被路由到
本地主机:9001
(如预期),但
/v4/。
返回
502


有指针吗?

500-不是502。这意味着你在9001端口运行的应用程序正在崩溃,请检查应用程序日志,我得到
502
而不是
500
apt得到安装lsof
然后
lsof-I:9002
你看到了什么?也不需要正则表达式。这只是一个映射。因此,修复位置:
location/api/v4/{
proxy\u passhttp://localhost:9002/v4/
行了!如果你愿意,你可以把它写下来作为答案,这样我就可以标记它了
location /api/v4/ {
  proxy_set_header   X-Real-IP $remote_addr;
  proxy_set_header   Host      $http_host;
  proxy_pass         http://localhost:9002/v4/;
}

location /api/ {
  proxy_set_header   X-Real-IP $remote_addr;
  proxy_set_header   Host      $http_host;
  proxy_pass         http://localhost:9001/;
}