У меня есть приложение angular, my-app
, которое я создаю локально с ng build --prod
и обслуживаю с Nginx dockerized, Dockerfile
это:
FROM nginx:alpine
COPY /dist/my-app /usr/share/nginx/html
EXPOSE 80
Пока я запустите контейнер на основе сборки образа с этим Dockerfile
, он работает. Хотя мне нужно поставить еще один Nginx, действующий как обратный прокси, перед этим, я хочу перенаправить трафик c с маршрутом, подобным /my-app
, на внутренний Nginx обслуживающий Angular, например:
http://DOMAIN/my-app ---> Reverse Proxy ---> Nginx+Angular
Я буду использовать Docker Compose для локального разработчика. Мой docker-compose.yml
очень прост:
version: '3'
services:
nginx:
container_name: my-nginx
build: ./nginx
ports:
- "80:80"
my-app:
container_name: my-app
build: ./my-app
Для приложения Angular я переопределяю "baseHref": "./my-app/"
в моем angular.json
файле, строю заново и настраиваю обратный прокси следующим образом:
events {}
http {
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www;
index index.html;
location / {
index index.html;
}
location /my-app {
rewrite /my-app/(.*) /$1 break;
proxy_pass http://my-app:80;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header Host $host;
}
}
}
Здесь index.html
в директиве location /
является настраиваемым, а не Angular приложением. Таким образом, я ожидаю, что мой обратный прокси-сервер будет обслуживать index.html
при посещении маршрута /
, что он и делает, но я получаю ошибку 400 Bad Request при попытке посетить /my-app/
. Есть ли у кого-нибудь решение для этого? Что я ошибаюсь? Спасибо!