我有一个docker-compose应用程序,它有三个服务react前端部署在3000端口,fast API后端部署在8000端口,ngnix部署在80端口。我的docker-compose看起来如下:
version: '3'
services:
app:
container_name: frontend-conatiner
restart: always
build: ./Frontend
ports:
- "3000:3000"
backend:
container_name: backend-container
restart: always
build: ./Backend
env_file:
- ./Backend/.env.local
volumes:
- ./Backend/:/backend
ports:
- "8000:8000"
command: uvicorn api.main:app --reload --workers 1 --host 0.0.0.0 --port 8000
nginx:
container_name: nginx-container
restart: always
build: ./nginx
ports:
- "80:80"
depends_on:
- app
我的nginx配置如下:
server {
listen 80;
server_name my_app;
# Proxy settings
location / {
proxy_pass http://app:3000;
}
# Backend Proxy settings
location /api/ {
proxy_pass http://backend:8000;
}
}
现在的问题是,我能够访问我的前端在http:localhost
,但我不能访问我的后端快速API,即。当我做http:localhost/api/docs
时,我得到not found
。当我尝试在没有nginx的情况下测试后端时。在http:localhost:8000/docs
,它工作得非常好。
我也试过切换前端和后端的位置,如果我改变我的nginx配置如下,那么我可以访问后端,但不能访问前端React应用程序:
server {
listen 80;
server_name my_app;
# Proxy settings
location / {
proxy_pass http://backend:8000;
}
# Backend Proxy settings
location /api/ {
proxy_pass http://app:3000;
}
}
所以我确信我在nginx配置中做错了什么,任何帮助都将不胜感激。
1条答案
按热度按时间9lowa7mx1#
这里的问题是,当你点击
http:localhost/api/docs
时,它会重定向到http:localhost:8000/api/docs
。没有这样的URL,只有http:localhost:8000/docs
。它会显示404 Notfound
为了解决这个问题,当url有
/api
时,我们必须将其重定向到后端,而不使用/api
url路径。将
nginx
配置文件更新为rewrite ^/api/(.*)$ /$1 break;
这将捕获/api
之后的所有内容并重定向到该路径