Nginx Proxy Pass Issue - Docker, React и Express - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть docker -композиция, которая выглядит следующим образом:

Контейнеры:

  1. Основной nginx шлюз контейнера. Маршрут / todos / route передается через proxy_:
  2. Другой контейнер nginx. Этот прокси-сервер передает либо:
  3. интерфейс React (для приложения todos), либо
  4. узел 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 конфиги:

  1. Конфигурация ввода:
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

1 Ответ

0 голосов
/ 20 апреля 2020

переписать /api(.*) $ 1 break;

, если это не работает, опубликуйте логи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...