Nginx 代理到新的虚拟机而不影响旧的站点启用规则

Nginx 代理到新的虚拟机而不影响旧的站点启用规则

我们有 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;
    }
    ....
}  

相关内容