Итак, пытаясь настроить Nginx в качестве обратного прокси-сервера с помощью докера. У меня есть три js-контейнера node (один интерфейс и две серверные службы), служба внешнего интерфейса вызывает две внутренние службы. Итак, я хочу, чтобы nginx перенаправлял на внешний интерфейс (который является веб-приложением), но каждый раз, когда я пытаюсь что-то отправить, я получаю ошибку 502 bad gateway. Когда я напрямую запускаю контейнеры докеров, я могу пропинговать другие контейнеры через dns_hostname или IP-адрес (который я беру из проверки докеров). Вот отредактированная версия моего docker-compose и моего nginx.conf
версия: "3.8"
Сервисы:
внешний интерфейс:
изображение: интерфейс
имя хоста: интерфейс
env_file:
/.env
сети:
- сеть
перезапуск: при сбое
разоблачать:
- "3000"
имя_контейнера: интерфейс
серверная служба-01:
изображение: бэкэнд-сервис-01
имя хоста: бэкэнд-сервис-01
env_file:
./бэкэнд-сервис-01/.env
сети:
- сеть
перезапуск: при сбое
имя_контейнера: бэкэнд-сервис-01
серверная служба-02:
изображение: бэкэнд-сервис-02
имя хоста: бэкэнд-сервис-02
env_file:
./бэкэнд-сервис-02/.env
сети:
- сеть
перезапуск: при сбое
имя_контейнера: бэкэнд-сервис-02
nginx-прокси:
изображение: nginx: стабильный-альпийский
имя хоста: nginx-прокси
сети:
- сеть
перезапуск: при сбое
тома:
- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /data/nginx/certs/crt_file.crt:/etc/nginx/crt_file.crt
- /data/nginx/certs/priv_key.key:/etc/nginx/priv_key.key:ro
порты:
- 80:80
- 443:443
имя_контейнера: nginx-прокси
зависит от:
- внешний интерфейс
- бэкэнд-сервис-01
- бэкэнд-сервис-02
сети:
сеть:
Также вот файл конфигурации nginx, который я использую:
рабочие_процессы авто;
pid /run/nginx.pid;
включить /etc/nginx/modules-enabled/*.conf;
События {
worker_connections 1024;
}
http {
восходящий интерфейс {
интерфейс сервера: 3000;
}
сервер {
# Директива прослушивания на порту 443 (TLS)
слушать 443 ssl;
слушать [::]:443 ssl;
ssl_certificate /etc/nginx/crt_file.crt;
ssl_certificate_key /etc/nginx/priv_key.key;
# Где мы храним наши error.log и access.log
журнал_ошибок /var/log/nginx/error.log;
журнал_доступа /var/log/nginx/access.log;
место расположения / {
корень /usr/src/app/public/;
proxy_pass https://frontend;
}
}
}
Я почти сделал все, чтобы исключить проблему с сетью, так как я могу пропинговать как IP-адрес, так и имя хоста докера внешнего интерфейса изнутри контейнера nginx (используя docker exec -it nginx-proxy sh). что попробовать дальше, или они могут ясно видеть, если я делаю что-то не так, это было бы очень признательно.