Docker nginx无法将请求转发到运行在不同容器中的服务
我想在我的微服务架构中使用nginx反向代理作为APIGateway 问题:Nginx无法代理传递到在不同容器中运行的myDocker nginx无法将请求转发到运行在不同容器中的服务,docker,nginx,containers,microservices,Docker,Nginx,Containers,Microservices,我想在我的微服务架构中使用nginx反向代理作为APIGateway 问题:Nginx无法代理传递到在不同容器中运行的mypayment\u服务。但是,当我尝试从nginx容器内部curl payment\u service:3000时,它可以工作。所以网络还可以 docker compose.yml version: '3' services: payment_service: container_name: payment_service build: ./payment
payment\u服务。但是,当我尝试从nginx
容器内部curl payment\u service:3000
时,它可以工作。所以网络还可以
docker compose.yml
version: '3'
services:
payment_service:
container_name: payment_service
build: ./payment
ports:
- "3000:3000"
volumes:
- ./payment:/usr/app
networks:
- microservice-network
api_gateway:
image: nginx:latest
container_name: api_gateway
restart: always
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf
ports:
- 8080:8080
- 443:443
depends_on:
- payment_service
networks:
- microservice-network
networks:
microservice-network:
driver: bridge
default.conf
upstream payment_server {
server payment_service:3000 max_fails=10;
}
server {
listen 8080;
location /api/v1/payment {
proxy_pass http://payment_server;
}
}
当我使用http://localhost:3000
但是不要使用http://localhost:8080/api/v1/payment
根据
如果在没有URI的情况下指定了proxy_pass,则在处理原始请求时,请求URI将以与客户端发送的相同的形式传递到服务器,或者在处理更改的URI时传递完整的规范化请求URI
我不知道您的支付服务期望的是什么,但我假设您正试图找到根路径。您需要在代理过程中添加尾随斜杠
:
location /api/v1/payment {
proxy_pass http://payment_server/;
}
否则,该请求将作为
http://payment_service:3000/api/v1/payment
据
如果在没有URI的情况下指定了proxy_pass,则在处理原始请求时,请求URI将以与客户端发送的相同的形式传递到服务器,或者在处理更改的URI时传递完整的规范化请求URI
我不知道您的支付服务期望的是什么,但我假设您正试图找到根路径。您需要在代理过程中添加尾随斜杠:
location /api/v1/payment {
proxy_pass http://payment_server/;
}
否则,该请求将作为
http://payment_service:3000/api/v1/payment
非常感谢。是的,这就是问题所在。我试图代理的路径是根路径。非常感谢。是的,这就是问题所在。我试图代理的路径是根路径。