Обслуживание приложения через nginx по пути, а не root - PullRequest
0 голосов
/ 25 апреля 2020

У меня запущено докеризованное приложение (Portainer), и я изо всех сил пытаюсь заставить его работать за докеризированным nginx.

Я хочу, чтобы оно было доступно на: subdomain.example.com/portainer.

Различные приложения работают на этом поддомене. В контейнере nginx файлы всех приложений c приложения монтируются в /var/www/app1, /var/www/app2, /var/www/portainer, et c.

Блок сервера включает в себя:

listen      443 ssl http2;
server_name subdomain.example.com;
root        /var/www;

location /portainer/ {
  alias             /var/www/portainer/public/;
  proxy_pass        http://portainer:9000/;    # host on docker network
  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 https;
  proxy_redirect    off;
}

Я ожидаю, что запрос на subdomain.example.com/portainer будет перенаправлен на subdomain.example.com/portainer/public/foo.bar.

Но то, что на самом деле происходит, является частью загрузки приложения, а ресурсы stati c - нет, и Я получаю nginx ошибку:

[ошибка] open () "/ var / www/portainer/main.js" не удалось (2: нет такого файла или каталога), запрос: "GET / portainer / main . js HTTP / 2.0 "

Заметки

  • Я пробовал rewrite и alias и root
  • Файлы там, разрешения в порядке. (Если я попытаюсь получить доступ к файлам напрямую, они будут обработаны.)
  • Если я попытаюсь это сделать на root (/) вместо пути (/portainer), то это будет работать

Итак, проблема в том, что nginx неправильно интерпретирует / пересылает путь запроса в проксируемое приложение.

Можете ли вы заметить мою ошибку?

...