У меня два контейнера 1. Flask серверное приложение 2. Angular интерфейсное приложение. Приложение Flask перенаправляет порт 8001, а приложение angular - порт 80. Оба работают нормально при прямом доступе. Теперь я пытаюсь использовать контейнер NGINX в качестве обратного прокси-сервера для перенаправления URL-адресов localhost: 5001 для приложения Flask и localhost: 80 для приложения Angular. Я слежу за этим руководством. вот мой docker -compose.yaml
version: '3'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: 'my_db'
MYSQL_USER: 'root'
MYSQL_PASSWORD: '****'
MYSQL_ROOT_PASSWORD: '****'
ports:
- '3306:3306'
volumes:
- my-db:/var/lib/mysql
nginx:
restart: always
build: ../nginx/.
depends_on:
- api_server
- web_ui
ports:
- '80:80'
api_server:
build: .
depends_on:
- db
environment:
SECRET_KEY: ****
FLASK_ENV: local
SQLALCHEMY_DATABASE_URI_DEV: mysql+mysqldb://root:****@db:3306/my_db
ports:
- "8001:8001"
web_ui:
depends_on:
- api_server
image: web_ui_local
environment:
API_URL: api_server:8001
volumes:
- '.:/app'
- '/app/node_modules'
ports:
- '8002:80'
nginx Dockerfile
FROM nginx:latest
RUN rm /etc/nginx/conf.d/default.conf
COPY ./default.conf /etc/nginx/conf.d/default.conf
и default.conf
upstream web_ui {
server web_ui:5001;
}
upstream api_server {
server api_server:5002;
}
server {
listen 80;
server_name localhost;
location /api_server {
proxy_pass http://api_server;
}
location /web_ui {
proxy_pass http://web_ui;
}
}
Невозможно получить доступ к localhost: 5001 ни локальный: 5002. nginx журналы говорят об этом при доступе к localhost
2020/05/08 16:39:57 [error] 6#6: *1 "/etc/nginx/html/index.html" is not found (2: No such file or directory), client: 172.21.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost"
172.21.0.1 - - [08/May/2020:16:39:57 +0000] "GET / HTTP/1.1" 404 556 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/xx.xx.xx.xx Safari/537.36" "-"
ОБНОВЛЕНИЕ:
доступ к localhost/api_server
дает мне следующую ошибку;
2020/05/08 19:03:01 [error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.21.0.1, server: 127.0.0.1, request: "GET /api_server HTTP/1.1", upstream: "http://172.21.0.3:5002/api_server", host: "localhost"
Где 172.21.0.3
- это ip контейнера api_server. так что этот ответ ожидается, потому что он не прослушивает порт 5002. Изменение этого на порт 8001 перенаправляет на api_server с ответом 404 bcuz нет такого маршрута GET /api_server
в приложении flask.
ОБНОВЛЕНИЕ 2: Я сделал default.conf намного проще, исходя из моих требований;
server {
listen 80;
server_name 127.0.0.1;
location / {
proxy_pass http://web_ui;
}
}
server {
listen 5001;
server_name 127.0.0.1;
location / {
proxy_pass http://api_server:8001;
}
}
Я удалил ports:'8002:80'
из web_ui, и вышеуказанное успешно перенаправляет в приложение Angular на localhost
. Но localhost:5001
по-прежнему не работает (нет ответа) :(
Обновление 3: перенаправление порта 5001
с порта nginx отсутствует. Теперь можно получить доступ к документам OpenApi на локальном хосте: 5001 тоже.