У меня есть docker -композиция, которая выглядит следующим образом:
Контейнеры:
- Основной nginx шлюз контейнера. Маршрут / todos / route передается через proxy_:
- Другой контейнер nginx. Этот прокси-сервер передает либо:
- интерфейс React (для приложения todos), либо
- узел express api (который обрабатывает todo logi c)
Я пытаюсь вызвать API todos из приложения React с помощью process.env.PUBLIC_URL + "/ api", чтобы получить доступ к маршруту "/" на моем express api. Однако это не работает, и я должен добавить еще один «/» к вызову React, чтобы он работал - как это: process.env.PUBLIC_URL + / api /
Примечание: моя домашняя страница React установлена to "/ todos"
Очевидно, проблема в том, как я переписываю маршруты на Nginx, но я пробовал каждую комбинацию под солнцем и не могу избавиться от необходимости для этого ведомого сла sh. Вот мои Nginx конфиги:
- Конфигурация ввода:
upstream todosnginx {
server todosnginx;
}
server {
listen 80;
error_page 404 /404.html;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /todos {
rewrite /todos/(.*) /$1 break;
proxy_intercept_errors on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://todosnginx/;
}
}
И задачи nginx:
upstream todoclient {
server todoclient:3000;
}
upstream todoserver {
server todoserver:9000;
}
server {
listen 80;
location / {
proxy_pass http://todoclient/;
}
location /sockjs-node {
proxy_pass http://todoclient;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
location /api {
rewrite /api/(.*) /$1 break;
proxy_pass http://todoserver/;
}
}
I я пытался сделать:
rewrite /api(.*) /$1 break;
в задачах nginx conf и
location /api/
, и я попытался добавить конечные слеши или удалить конечные слеши и многие другие комбинации. Было бы замечательно, если бы вы знали, где я ошибаюсь.
Большое спасибо, R