我第一次尝试使用 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;
...
}