Моя цель - иметь 2 контейнера докеров:
- Контейнер nginx (на основе nginx:latest) для работы в качестве обратного прокси
- контейнер со статическим сайтом (на основе nginx:alpine)
Позже я добавлю 1+ бэкэнд-сервисы .net core (пока не важно). В настоящее время, когда я пытаюсь получить доступ к своему веб-серверу, используя общедоступный IP-адрес, я получаю 502 Bad gateway. Вот моя текущая конфигурация:
docker-compose.yaml
версия: '3'
Сервисы:
обратный прокси:
изображение: nginx: последний
имя_контейнера: обратный_прокси
зависит от:
- статический сайт
тома:
- ./reverse_proxy/nginx.conf:/etc/nginx/nginx.conf
порты:
- 80:80
статический веб-сайт:
изображение: см-статический-веб-сайт
строить:
контекст: ./веб-сайт
имя_контейнера: sm_static_website
порты:
- "8080:80"
nginx.conf для обратного прокси:
рабочие_процессы авто;
включить /etc/nginx/modules-enabled/*.conf;
События {
worker_connections 1024;
}
http {
сервер {
слушать 80 default_server;
слушать [::]:80 default_server;
имя_сервера х.х.х.х; # мой_публичный_ip
место расположения / {
proxy_pass http://sm_static_website:8080;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
Dockerfile для статического сайта:
ОТ nginx:alpine
РАБОЧИЙ КАТАЛОГ /html
КОПИРОВАТЬ . /var/www/html
ВЫСТАВИТЬ 8080
Из контейнера моего веб-сайта я вижу, что nginx работает/прослушивает 80:
netstat -tulpn | grep СЛУШАТЬ
TCP 0 0 127.0.0.11:41389 0.0.0.0:* ПРОСЛУШАТЬ -
TCP 0 0 0.0.0.0:80 0.0.0.0:* СЛУШАТЬ 1/nginx: master pro
tcp 0 0 :::80 :::* СПИСОК 1/nginx: master pro
С моего сервера я вижу, что и контейнеры remote_proxy, и контейнеры веб-сайтов прослушивают 80/8080 соответственно:
netstat -tulpn | grep СЛУШАТЬ
TCP 0 0 0.0.0.0:80 0.0.0.0:* ПРОСЛУШИВАТЬ 13936/докер-прокси
TCP 0 0 0.0.0.0:8080 0.0.0.0:* ПРОСЛУШИВАТЬ 13797/докер-прокси
tcp6 0 0 :::80 :::* ПРОСЛУШИВАТЬ 13942/докер-прокси
tcp6 0 0 :::8080 :::* ПРОСЛУШИВАТЬ 13804/докер-прокси
ps -aux на сервере возвращает:
корень 13936 0,0 0,0 1075140 3580 ? Sl 00:24 0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.18.0.3 -container-port 80
корень 13797 0,0 0,0 1148872 3624 ? Sl 00:24 0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.18.0.2 -container-port 80
В журнале контейнера веб-сайта ошибок нет, рабочие процессы запущены. Однако журнал обратного прокси показывает:
2022/05/20 01:20:29 [ошибка] 31#31: *1 connect() не удалось (111: соединение отклонено) при подключении к восходящему каналу, клиент: x.x.x.x, сервер: x.x.x.x, запрос: "GET / HTTP/1.1 ", вверх по течению: "http://172.19.0.2:8080/", хост: "x.x.x.x"
Любые идеи, что я делаю неправильно? Если я удалю строку Volumes: из docker-compose.yml, то получу страницу nginx по умолчанию из контейнера обратного прокси. Это указывает на то, что он правильно слушает, принимает запрос, но не перенаправляет его в контейнер веб-сайта.