Вопрос или проблема
Я пытаюсь настроить Nginx Proxy Manager (NGPM) в качестве обратного прокси для Gitlab и других веб-сайтов/сервисов. Сам Gitlab работает внутри контейнера Docker, у которого есть свой собственный IP-адрес. NGPM также находится внутри контейнера Docker. Оба контейнера работают на сервере Unraid (и были установлены из “Приложений”, которые в данном случае являются предустановленными шаблонами Docker)
Я пробовал это:
https://www.itsfullofstars.de/2019/06/gitlab-behind-a-reverse-proxy/
Но это лишь привело к ошибке 502 Bad Gateway
от Nginx.
Также пробовал некоторые другие вещи, но большинство ссылок, которые я нахожу, говорят о декомплексировании nginx от gitlab с nginx на той же машине, указывающим на некоторые материалы gitlab.
На данный момент я не понимаю, почему ничего не работает, и просто тыкаюсь в конфигурационные файлы, не совсем понимая, что делаю. Я даже не знаю, что предоставить вам, чтобы вы могли мне помочь, поэтому, пожалуйста, если вам нужно что-то для решения моей проблемы, я с радостью это предоставлю.
Логи редактирования:
Лог ошибок выглядит так:
2020/06/24 11:55:54 [error] 2834#2834: *1966 connect() failed (113: Host is unreachable) while connecting to upstream, client: 0.0.0.0, server: develop.company.com, request: "GET / HTTP/2.0", upstream: "http://192.168.10.170:80/", host: "develop.company.com", referrer: "http://192.168.10.135:7818/nginx/proxy"
Доступный лог выглядит так:
[24/Jun/2020:11:49:56 +0200] - 502 502 - GET https develop.company.com "/" [Client 0.0.0.0] [Length 166] [Gzip -] [Sent-to 192.168.10.170] "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0" "http://192.168.10.135:7818/nginx/proxy"
[24/Jun/2020:11:49:56 +0200] - - 499 - GET https develop.company.com "/favicon.ico" [Client 0.0.0.0] [Length 0] [Gzip -] [Sent-to 192.168.10.170] "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0" "-"
Обратите внимание, что я изменил IP-адрес клиента для загрузки сюда. Поскольку я тестирую это из сети, где находятся прокси и gitlab, это наш внешний IP.
Редактировать конфигурацию:
Gitlab:
Я пробовал только с этим:
external_url="https://develop.company.com
Но также и это:
nginx['listen_port'] = 80
nginx['listen_https'] = false
Я также пробовал http-версию для external_url
.
NGPM:
Я также пробовал http с 443, https с 80, но это не имело значения (и тоже не имело бы большого смысла).
Настройка сетевого соединения для контейнера Docker в Unraid, вместо того чтобы давать ему свой собственный IP-адрес, сработала, обратный прокси, похоже, теперь работает нормально.
Вот вся “Настройка”, которая мне была необходима.
В файле gitlab.rb вам нужно раскомментировать/установить эти значения:
external_url="https://develop.company.com
nginx['listen_port'] = 80
nginx['listen_https'] = false
Обратите внимание, что https://
здесь необходимо.
Конфигурация контейнера Unraid:
Так что да. Не знаю, почему это не сработало, когда Gitlab имел свой собственный IP-адрес, но это работает как ожидалось сейчас.
Ответ или решение
Подключение GitLab к Nginx Proxy Manager через Docker на Unraid: Практическое руководство
Ваша задача заключается в настройке GitLab, работающего в контейнере Docker, с Nginx Proxy Manager (NGPM), который также размещен в контейнере Docker на сервере Unraid. Данная проблема может быть сложной, особенно из-за особенностей сетевой конфигурации Docker. В этом руководстве мы адресуем основные проблемы и делаем шаги, чтобы установить правильное взаимодействие между вашими сервисами.
Описание проблемы
Как вы упомянули, вы столкнулись с ошибкой 502 Bad Gateway
. Это обычно указывает на проблемы с подключением Nginx к вашему контейнеру GitLab, которые могут возникать по нескольким причинам:
- Неправильная настройка
external_url
в конфигурации GitLab. - Ошибки в конфигурации Nginx Proxy Manager, связанные с маршрутизацией и портами.
- Необходимость в соответствующей настройке сетевого режима контейнеров.
Шаги для устранения неполадок и настройки
-
Проверка сетевого подключения:
- Убедитесь, что оба контейнера (GitLab и NGPM) находятся в одной сети Docker, или используйте сетевой режим
bridge
, чтобы обеспечить правильное взаимодействие.
- Убедитесь, что оба контейнера (GitLab и NGPM) находятся в одной сети Docker, или используйте сетевой режим
-
Настройка GitLab:
В файле конфигурацииgitlab.rb
выполните следующие настройки:external_url "https://develop.company.com" nginx['listen_port'] = 80 nginx['listen_https'] = false
Обратите внимание на то, что необходимо использовать
https
вexternal_url
, если вы планируете использовать SSL/TLS через Nginx Proxy Manager. -
Настройка Nginx Proxy Manager:
Чтобы правильно перенаправить запросы на GitLab, выполните следующие действия:- В NGPM создайте новый прокси-хост с данными:
- Domain Names: develop.company.com
- Scheme: http
- Forward Hostname / IP: IP адрес вашего контейнера GitLab (например, 192.168.10.170)
- Forward Port: 80
- Убедитесь, что вы выбрали опцию "Block Common Exploits".
- В NGPM создайте новый прокси-хост с данными:
-
Решение проблемы с сетевыми подключениями:
Ваша проблема может заключаться в том, что GitLab не может быть достигнут из контейнера NGPM, если контейнер GitLab имеет собственный IP адрес. Решением зависит от упрощения сетевой архитектуры:- Попробуйте перевести контейнеры в режим "host" или использовать один и тот же сетевой промежуток, чтобы избежать проблем с маршрутизацией.
-
Тестирование и отладка:
- После изменения конфигураций не забудьте перезапустить контейнеры для применения новых настроек.
- Проверьте логи Nginx Proxy Manager и GitLab для выявления возможных новых ошибок. Эти логи могут дать подсказки относительно того, где именно происходит сбой.
Заключение
Сеть контейнеров и их взаимодействие могут быть сложной задачей при работе с Docker и Nginx Proxy Manager. Однако, следуя вышеописанным шагам, вы сможете успешно настроить GitLab за прокси-сервером Nginx. Если вы столкнётесь с новыми проблемами или ошибками, стоит обратиться к документации GitLab и Nginx, а также к сообществу для получения дополнительных решений.
Этот процесс может потребовать времени и терпения, особенно если вы сталкиваетесь с новыми технологиями. Тем не менее, с правильной информацией и подходом вы сможете их преодолеть и успешно интегрировать ваши сервисы.