Вопрос или проблема
У нас настроена сеть, как указано ниже
1/ Сервер Ubuntu с Cockpit на 192.179.10.101. Cockpit доступен по адресу https://192.168.1.101:9090
2/ Менеджер прокси Nginx на 192.168.10.102
3/ У нас настроено доменное имя, для примера, abc.com. Мы настроили пересылку DNS, https://cockpit.abc.com, чтобы получить доступ к нашему Cockpit извне
4/ Мы настроили NPM на пересылку с cockpit.abc.com на 192.168.1.101:9090 и также используем SSL от Let’s Encrypt
5/ Мы изменили cocpit.conf, чтобы он был осведомлен о прокси, следуйте этой статье
https://garrett.github.io/cockpit-project.github.io/external/wiki/Proxying-Cockpit-over-NGINX
6/ Если мы используем внутренний IP, например, 192.168.1.101:9090, мы можем получить доступ к Cockpit из внутренней сети
7/ Если мы используем cockpit.abc.com, мы получаем ошибку, так как TLS рукопожатие не удалось и получено предупреждение. Эта ошибка означает, что, после проверки, Cockpit все еще не осведомлен о прокси…
Мы что-то упустили, чтобы сделать Cockpit доступным извне через cockpit.abc.com?
Спасибо
Я могу получить доступ к Cockpit, создав файл /etc/cockpit/cockpit.conf с содержимым:
[WebService]
ProtocolHeader = X-Forwarded-Proto
AllowUnencrypted=true
Origins = *
.
Ответ или решение
Для настройки Cockpit с использованием Nginx Proxy Manager и обеспечения его доступности через доменное имя из внешней сети, необходимо учитывать несколько важных аспектов, связанных с проксированием и безопасностью, включая использование протоколов HTTPS и корректной настройки конфигурационных файлов. Обратим внимание на теоретическую основу, разберем пример настройки и применим его на практике.
Теоретическая основа
Cockpit и Nginx Proxy Manager
Cockpit — это удобный веб-интерфейс для управления серверами на базе Linux, предоставляющий возможность мониторинга системы, управления пользователями и службами. Nginx Proxy Manager (NPM) служит посредником для маршрутизации HTTP/HTTPS запросов, обеспечивая SSL-терминацию и возможность управления проксированием через удобный интерфейс.
Основные требования
- Корректное доменное имя (FQDN): Для доступа к Cockpit извне необходимо, чтобы доменное имя (например, cockpit.abc.com) было настроено с соответствующими DNS записями, указывающими на IP-адрес вашего NPM.
- SSL сертификаты: Важно, чтобы соединение было защищено с помощью SSL. Let’s Encrypt предоставляет возможность автоматической установки бесплатных SSL сертификатов через NPM.
- Настройка проксирования: В Cockpit и Nginx должны быть корректно настроены параметры для работы с прокси-сервером, включая учет заголовков X-Forwarded-* и корректировка настроек конфигурации WebService в Cockpit.
Пример настройки
Шаги настройки
-
DNS конфигурация:
Параметризация DNS записи для доменного имени cockpit.abc.com, чтобы оно указывало на ваш NPM сервер (192.168.10.102). -
Настройка Nginx Proxy Manager:
- В панели управления NPM создайте новый Proxy Host.
- Укажите доменное имя cockpit.abc.com.
- В поле Forward Hostname or IP введите IP адрес 192.168.1.101 и порт 9090.
- Включите опцию «Активация SSL» и выберите «Request a new SSL certificate from Let’s Encrypt». Убедитесь, что опция «Force SSL» также включена.
-
Настройка файла cockpit.conf:
Убедитесь, что файл /etc/cockpit/cockpit.conf содержит следующее:[WebService] ProtocolHeader = X-Forwarded-Proto AllowUnencrypted = true Origins = *
Этот конфигурационный файл позволяет Cockpit правильно обрабатывать запросы, поступающие от прокси, и разрешает небезопасные подключения, что может помочь локальной отладке.
-
Перезапуск сервисов:
После изменений в конфигурации потребуется перезапустить службы Cockpit и Nginx для применения новых настроек:sudo systemctl restart cockpit sudo systemctl restart nginx
Применение и устранение проблем
Если вы по-прежнему сталкиваетесь с ошибкой TLS handshake fail, выполните следующие проверочные действия:
-
Проверка атрибутов SSL: Убедитесь, что SSL сертификаты правильно установлены и действительны. В интерфейсе NPM проверьте, что сертификат был успешно создан и закреплен за доменом cockpit.abc.com.
-
Логирование и диагностика: Просмотрите логи Nginx и Cockpit. Они могут содержать дополнительные указания на причину ошибки. Логи можно найти по путям /var/log/nginx/error.log и /var/log/cockpit/cockpit.log соответственно.
-
Проверка сети: Убедитесь, что настраиваемый сервер Cockpit доступен из внутренней сети по адресу 192.168.1.101:9090.
-
Анализ заголовков:
Убедитесь, что в конфигурации Nginx передаются корректные заголовки X-Forwarded-For и X-Forwarded-Proto, так как эти заголовки важны для работы HTTPS при условиях обратного проксирования.
Заключение
В процессе настройки Cockpit для работы через Nginx Proxy Manager следует внимательно соблюдать требований по SSL, конфигурации файлов, а также правильно маршрутизировать запросы. Убедитесь, что все конфигурации корректно применены, и используйте утилиты системного администрирования для диагностики и устранения неисправностей.
В случае, если все действия выполнены корректно, доступ к Cockpit по доменному имени cockpit.abc.com должен осуществляться без ошибок, позволяя безопасно управлять вашим сервером из внешней сети.