Как перенаправить все запросы в подпуть с помощью NGINX?

Обзор приложения, проблемы и цели.

Приложение состоит из сети микросервисов, упакованных в отдельные контейнеры Docker. К таким контейнерам относятся Django, Postgres, Nodejs(+ Socket.io) и Nginx+Angular2 (статические файлы). В настоящее время Nginx имеет специальные маршруты для файлов и направляет все другие запросы в приложение Angular2, которое затем имеет собственный маршрутизатор.

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

Так что работает при развертывании в...http://host, но не с http://host/path, поскольку все запросы в микросервисе направляются обратным прокси-сервером NGINX.

Как я могу использовать переписывание / перенаправление NGINX, чтобы добавить /path на URL, чтобы его можно было обслуживать из подкаталога, но NGINX все равно будет знать, что местоположения все еще существуют на корневом уровне?

Моя 301 Попытка

  location = / {
    root /www/ng;
    try_files $uri $uri/ /index.html;
    return 301 http://$host/pot;
  }

Здесь я сделал 301 редирект на лови все локации. Это сработало для этого улова, но при добавлении 301 в статические местоположения перенаправление не работает. 301 - лучшее решение? Как бы я перенаправил статические локации?

Оригинальный файл конфигурации NGINX

server {
  listen 80;
  client_max_body_size 10M;
  root /www/data;

  location /static {
    alias /var/www/static;
  }

  location /media {
    alias /var/www/media;
  }

  location ~* ^/(api|admin) {
    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_pass http://django:8000;
  }

  location /gateway {
    proxy_http_version  1.1;
    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 Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_pass http://nodejs:3000;
  }

  location = / {
    root /www/ng;
  }

  location / {
    try_files $uri $uri/ @ng;
  }

  location @ng {
    root /www/ng;
    try_files $uri $uri/ /index.html;
  }

  error_page 403 /403.html;
  error_page 404 /404.html;
  error_page 500 502 503 504 /500.html;
}

0 ответов

Другие вопросы по тегам