У меня запущено докеризованное приложение (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 неправильно интерпретирует / пересылает путь запроса в проксируемое приложение.
Можете ли вы заметить мою ошибку?