#linux #docker #ubuntu #nginx #load-balancing
#линукс #докер #ubuntu #nginx #балансировка нагрузки
Вопрос:
я очень новичок в этом докере, я пытаюсь создать балансировщик нагрузки на 2 сервера, первый порт-localhost:2222 и localhost:3333, к нему можно получить правильный доступ.
http { upstream all { server 127.0.0.1:3333; server 127.0.0.1:2222; } server{ listen 8080; location / { proxy_ssl_server_name on; proxy_pass http://all/; } } } events {}
но когда я пытаюсь интегрировать его с балансировщиком нагрузки nginx с этой конфигурацией. с localhost:8080 в качестве прослушивателя, к нему невозможно получить доступ, он всегда отображал 502 плохих шлюза, и nginx показал эту ошибку
2021/12/04 10:04:23 [ошибка] 32#32: *4 не удалось подключиться () (111: отказано в подключении) при подключении к вышестоящему, клиент: 172.17.0.1, сервер: , запрос: «GET / HTTP/1.1», вышестоящий: «http://127.0.0.1:2222/», хост: «локальный хост:8080»
2021/12/04 10:04:23 [ошибка] 32#32: *4 не удалось подключиться () (111: отказано в подключении) при подключении к вышестоящему, клиент: 172.17.0.1, сервер: , запрос: «GET / HTTP/1.1», вышестоящий: «http://127.0.0.1:3333/», хост: «локальный хост:8080» 172.17.0.1 — — [04/Дек/2021:10:04:23 0000] «GET / HTTP/1.1″ 502 157 » — «»Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:93.0) Gecko/20100101 Firefox/93.0»
2021/12/04 10:04:27 [ошибка] 32#32: *4 нет активных потоков при подключении к восходящему потоку, клиент: 172.17.0.1, сервер: , запрос: «GET / HTTP/1.1», восходящий поток: «http://all/», хост: «локальный хост:8080» 172.17.0.1 — — [04/Дек/2021:10:04:27 0000] «GET / HTTP/1.1″ 502 157 » — «»Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:93.0) Gecko/20100101 Firefox/93.0»
кто-нибудь знает, как это решить? я долго боролся с этим
Комментарии:
1. Nginx работает не в контейнере, а на главной машине?
2. nginx работает в контейнере, но отделен от веб-контейнера
3. Не используйте адрес обратной связи(127.0.0.1). Если вы предоставляете порт контейнера, используйте IP-адрес хоста. Или свяжите контейнеры и используйте имя контейнера, а не адрес обратной связи.
4. @furqon2710 В этом-то и проблема. Локальный хост контейнера не совпадает с локальным хостом хоста. Вы должны использовать имена (с сетью, отличной от сети по умолчанию) или известные IP-адреса
Ответ №1:
Поскольку ваш Nginx работает в контейнере, его локальный хост отличается от хост-компьютера. Каждый контейнер имеет свой собственный локальный хост.
Вероятно, лучшим способом было бы создать новую сеть, поместить в нее контейнеры и использовать имена для подключения к другим контейнерам. Разрешение имен работает в самостоятельно созданной сети, и вам не нужно знать IP-адреса или предоставлять какие-либо порты хосту.