我们有 3 台服务器。一台是前端代理,另外两台是内部虚拟机。
前端/站点启用/默认
server {
listen 80;
rewrite ^(.*) https://$host$1 permanent;
location / {
proxy_pass http://10.10.0.56;
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /beta {
proxy_pass http://10.10.0.63;
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
现在虚拟机10.10.0.63
是新的。我们想并行运行两个系统。
我们在新的 vm 中有这种旧规则。
10.10.0.63/站点启用/默认
server {
listen 80;
client_max_body_size 100M;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
location /api {
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_pass http://localhost:5050;
proxy_redirect default;
}
问题是,有没有一种方法可以访问http://example.com/beta/api
而不需要我们改变规则10.10.0.63/site-enabled/default
?也就是说,不需要我们写入location /beta/api
原始规则location /api
。
我们可以用 nginx 做到这一点吗?几周后,我们将摆脱旧系统,而费尽周折来更改 URL 似乎很愚蠢(我们可能不得不在源代码中编辑很多地方!)。
谢谢。
我仍然没有好的解决办法,但我看了看这个 如何使用 HttpRewriteModule 快速轻松地删除 Nginx 中 URL 的一部分?
我去掉了beta
。看起来它正在工作。
答案1
基本上我在这里给出了建议:如何使用 HttpRewriteModule 快速轻松地删除 Nginx 中 URL 的一部分?
假设旧的 url 是http://example.com/api
,并且您想在 nginx 中保留相同的配置,但是新的 vm 使用,http://example.com/beta/api
那么您可以重用相同的配置,但需要添加rewrite
.
因此在启用站点时,我有这个
server {
listen 80;
rewrite ^/beta(.*)$ $1 last; # strip out the beta
.....
location /api {
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_pass http://localhost:5050;
proxy_redirect default;
}
....
}