目前我有这个,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_pass
api/blah
我尝试在 Google 上搜索类似proxy_pass with subpath
或类似的内容,但似乎不是我需要的。所以我想知道这是否可行,还是我只是不知道用什么词来查找?
提前感谢任何建议。
答案1
使用 nginxlocation
和rewrite
指令,类似这样的就可以了:
location ~ ^/sms/ {
rewrite ^/sms/(.*) /api/$1 break;
proxy_pass http://1.2.3.4;
...
}
别忘了先测试一下。