nginx proxy_pass 可以使用灵活的子路径吗?

nginx proxy_pass 可以使用灵活的子路径吗?

目前我有这个,proxy_pass它工作正常

    location = /sms/resetpass {
             proxy_pass http://xxx.xxx.xxx.xxx/api/resetpass;
             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 = /sms/sample1 {
             proxy_pass http://xxx.xxx.xxx.xxx/api/sample1;
             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 block

可以做这样的事吗?

    location = /sms/something_here {
             proxy_pass http://xxx.xxx.xxx.xxx/api/something_here;
             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;
    }

意思是something_here如果我传入任何 URL,sms/blah那么proxy_passapi/blah

我尝试在 Google 上搜索类似proxy_pass with subpath或类似的内容,但似乎不是我需要的。所以我想知道这是否可行,还是我只是不知道用什么词来查找?

提前感谢任何建议。

答案1

使用 nginxlocationrewrite指令,类似这样的就可以了:

location ~ ^/sms/ {
    rewrite ^/sms/(.*) /api/$1 break;
    proxy_pass http://1.2.3.4;
    ...
}

别忘了先测试一下。

相关内容