Docker Compose 中的 Nginx API 网关
Nginx API Gateway in Docker Compose
(免责声明:我在这里看到过很多版本的这个问题,但 none 似乎真的回答了我的问题。)
我想使用 NGINX 作为 API 网关,将请求路由到 docker-compose 中的微服务 APIs。
对于我的示例应用程序,我有两个微服务 API(A 和 B)。任何以 /a
开头的请求端点都应该转到 API-A,任何以 /b
开头的请求端点都应该转到 API-B.
我遇到的一些问题是:
- 我希望像
/a/foo/bar
这样的路径匹配 API-A 但不匹配 /ab/foo
- 无论路径是否以
/
结尾(aka /a/foo
和 /a/foo/
都有效,我希望路由能够正常工作)
我的 docker-compose
文件如下所示:
version: "3.8"
services:
gateway:
build:
context: ./api-gw
ports:
- 8000:80
apia:
build:
context: ./api-a
ports:
- 8000
apib:
build:
context: ./api-b
ports:
- 8000
我的示例 NGINX 配置文件如下所示:
server {
listen 80;
server_name localhost;
location ^~ /a {
proxy_pass http://apia:8000/;
}
location ^~ /b {
proxy_pass http://apib:8000/;
}
}
如何设置我的 NGINX 配置以正确路由我的请求?
感谢您的帮助!
您需要将您的 Nginx 正则表达式规则更改为这些:
匹配 Api-A :
^a(\/.*)?
匹配 Api-B :
^b(\/.*)?
(免责声明:我在这里看到过很多版本的这个问题,但 none 似乎真的回答了我的问题。)
我想使用 NGINX 作为 API 网关,将请求路由到 docker-compose 中的微服务 APIs。
对于我的示例应用程序,我有两个微服务 API(A 和 B)。任何以 /a
开头的请求端点都应该转到 API-A,任何以 /b
开头的请求端点都应该转到 API-B.
我遇到的一些问题是:
- 我希望像
/a/foo/bar
这样的路径匹配 API-A 但不匹配/ab/foo
- 无论路径是否以
/
结尾(aka/a/foo
和/a/foo/
都有效,我希望路由能够正常工作)
我的 docker-compose
文件如下所示:
version: "3.8"
services:
gateway:
build:
context: ./api-gw
ports:
- 8000:80
apia:
build:
context: ./api-a
ports:
- 8000
apib:
build:
context: ./api-b
ports:
- 8000
我的示例 NGINX 配置文件如下所示:
server {
listen 80;
server_name localhost;
location ^~ /a {
proxy_pass http://apia:8000/;
}
location ^~ /b {
proxy_pass http://apib:8000/;
}
}
如何设置我的 NGINX 配置以正确路由我的请求?
感谢您的帮助!
您需要将您的 Nginx 正则表达式规则更改为这些:
匹配 Api-A :
^a(\/.*)?
匹配 Api-B :
^b(\/.*)?