Nginx 中的多路径

Nginx 中的多路径

我第一次尝试使用 nginx,并且正在本地运行它。我已经能够启动我的服务,但我有一个令人困惑的问题,因为我运行一个微服务,并且在升级期间我希望能够阻止特定服务。

现在,每个服务都有一个路径,例如

\api\v1\wallet \api\v1\card

我遇到的问题是钱包和卡路径都属于同一项服务。

如果我有不同的路径,我是否必须重复,或者有没有什么方法可以让它更好地工作?

这是我的配置文件

worker_processes 4;

events { worker_connections 1024; }
http {

    server {

        listen 80;
        charset utf-8;

        location ~ ^/api/v1/user {
            rewrite ^/api/v1/user/(.*) /$1 break;
            proxy_pass http://user-service:3001;
            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 /api/v1/wallet/ {
            # rewrite /api/v1/wallet/(.*) /$1 break;
            proxy_pass http://wallet-service:3007/api/v1/wallet/;
            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 /api/v1/card/ {
            # rewrite /api/v1/wallet/(.*) /$1 break;
            proxy_pass http://wallet-service:3007/api/v1/card/;
            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;
        }

    }


}

答案1

您可以使用以下设置:

location /api/v1/user {
    ...
}

location ~ ^/api/v1/(wallet|card)/$ {
    proxy_pass http://wallet-service:3007/api/v1/$1/;
    ...
}

这里我们使用正则表达式捕获将路径组件放入$1变量中,然后在proxy_pass目标中使用它。

如果您想通过 传递 URL 的其余部分proxy_pass,那么您需要第二次捕获:

location ~ ^/api/v1/(wallet|card)/(.*)$ {
    proxy_pass http://wallet-service:3007/api/v1/$1/$2;
    ...
}

相关内容