Рейтинг:1

Cockpit через NGINX — настройки делают другие сервисы недоступными

флаг cn

У меня есть сервер (Ubuntu-Server) с несколькими серверами на основе Docker (Gitlab, Redmine) и NGINX в качестве прокси.

gitlab.<myserver> => NGINX -> <docker-net-ip>:port => Gitlab-контейнер  
redmine.<myserver> => NGINX -> <docker-net-ip>:port => Redmine-контейнер
                                                         SQL-контейнер  
                                                         Сертбот  

Это работает как шарм. Теперь я хочу расширить свой сервер с помощью веб-службы Cockpit:

cockpit.<myserver> => NGINX -> localhost:9090 => Cockpit работает на сервере  
gitlab.<myserver> => NGINX -> <docker-net-ip>:port => Gitlab-контейнер  
redmine.<myserver> => NGINX -> <docker-net-ip>:port => Redmine-контейнер
                                                         SQL-контейнер  
                                                         Сертбот  

Я добавил дополнительное правило NGINX (соответствующее https://github.com/cockpit-project/cockpit/wiki/Proxying-Cockpit-over-NGINX) для кабины, а затем кабина доступна, но ни Redmine, ни Gitlab.Если я удалю правило, будет наоборот.

В /etc/nginx/доступные сайты/ и /etc/nginx/сайты с поддержкой/ хранятся следующие правила NGINX:

gitlab.<мойсервер>

сервер {

    слушать 80;
    слушать [::]:80;

    имя_сервера gitlab.<myserver>;

    место расположения / {
        proxy_pass http://<docker-net-ip>:порт;
        прокси_буферизация выключена;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

redmine.<мойсервер>

сервер {

    слушать 80;
    слушать [::]:80;

    server_name redmine.<myserver>;

    место расположения / {
        proxy_pass http://<docker-net-ip>:порт;
        proxy_set_header Хост $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $ схема;
    }
}

и теперь я добавил:
кабина.<myserver>

сервер {
    слушать 80;
    слушать 443 ssl;

    server_name cockpit.<myserver>;

    место расположения / {
        # Требуется для проксирования соединения с Cockpit
        прокси_пароль https://127.0.0.1:9090;
        proxy_set_header Хост $host;
        proxy_set_header X-Forwarded-Proto $ схема;

        # Требуется для работы веб-сокетов
        прокси_http_версия 1.1;
        прокси_буферизация выключена;
        proxy_set_header Обновить $http_upgrade;
        proxy_set_header Соединение "обновление";

        # Передать заголовок ETag из Cockpit клиентам.
        # См.: https://github.com/cockpit-project/cockpit/issues/5239
        сжатие выключено;
    }
}

и /etc/cockpit/cockpit.conf

[Веб-сервис]
Происхождение = https://cockpit.<myserver> 127.0.0.1:9090
Заголовок протокола = X-Forwarded-Proto

[Журнал]
Fatal = /var/log/cockpit.log

[Сеанс]
ПростойТаймаут=15

Чего здесь не хватает?

Alex44 avatar
флаг cn
это уже решено...
Рейтинг:1
флаг cn

Чего здесь не хватает?

Проблема возникает не на всех устройствах. Некоторые показывают, что «Это соединение не защищено». для редмайн и гитлаб. Но кабины нет. Решение загадки теперь в том, что правила для Gitlab и Redmine не полные и запросы https зависают в никуда.

Правила для порта 443 (https) отсутствуют. Теперь я изменил блоки на два:

  1. Перенаправить http запрос на https
  2. прослушивать https-запросы и перенаправлять их в приложение

Теперь это выглядит так:

/etc/nginx/sites-available/gitlab.<myserver> связанный с /etc/nginx/sites-enabled/gitlab.<myserver>

# перенаправляем HTTP-запрос на https с сохранением URI запроса
сервер {

    слушать 80;
    слушать [::]:80;

    имя_сервера gitlab.<myserver>;

    вернуть 301 https://gitlab.<myserver>$request_uri;
}

# HTTPS-запросы будут перенаправлены серверному приложению
сервер {

    слушать 443 ssl;
    слушать [::]:443 ssl;

    имя_сервера gitlab.<myserver>;

    место расположения / {
        proxy_pass http://<docker-net-ip>:<port>;
        прокси_буферизация выключена;
        proxy_set_header X-Real-IP $remote_addr;

        # Примечание. Вы должны отключить gzip для трафика SSL.
        # См.: https://bugs.debian.org/773332
        сжатие выключено;
    }
}

/etc/nginx/sites-available/redmine.<myserver> связанный с /etc/nginx/sites-enabled/redmine.<myserver>

# перенаправляем HTTP-запрос на https с сохранением URI запроса
сервер {

    слушать 80;
    слушать [::]:80;

    server_name redmine.<myserver>;

    вернуть 301 https://redmine.<myserver>$request_uri;
}

# HTTPS-запросы будут перенаправлены серверному приложению
сервер {

    слушать 443 ssl;
    слушать [::]:443 ssl;

    server_name redmine.<myserver>;

    место расположения / {
        proxy_pass http://<docker-net-ip>:<port>;
        proxy_set_header Хост $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $ схема;

        # Примечание. Вы должны отключить gzip для трафика SSL.
        # См.: https://bugs.debian.org/773332
        сжатие выключено;
    }
}

/etc/nginx/sites-available/cockpit.<myserver> связанный с /etc/nginx/sites-enabled/cockpit.<myserver>

сервер {
    слушать 80;
    слушать 443 ssl;

    server_name cockpit.<myserver>;

    место расположения / {
        # Требуется для проксирования соединения с Cockpit
        прокси_пароль https://127.0.0.1:9090;
        proxy_set_header Хост $host;
        proxy_set_header X-Forwarded-Proto $ схема;

        # Требуется для работы веб-сокетов
        прокси_http_версия 1.1;
        прокси_буферизация выключена;
        proxy_set_header Обновить $http_upgrade;
        proxy_set_header Соединение "обновление";

        # Передать заголовок ETag из Cockpit клиентам.
        # См.: https://github.com/cockpit-project/cockpit/issues/5239
        сжатие выключено;
    }
}

и /etc/cockpit/cockpit.conf

[Веб-сервис]
Происхождение = https://cockpit.<myserver> 127.0.0.1:9090
Заголовок протокола = X-Forwarded-Proto

[Журнал]
Fatal = /var/log/cockpit.log

[Сеанс]
ПростойТаймаут=15

и для полноты:
/etc/nginx/доступные сайты/по умолчанию связанный с /etc/nginx/sites-enabled/по умолчанию

##
# Вам следует просмотреть следующие URL-адреса, чтобы получить четкое представление
# файлов конфигурации Nginx, чтобы полностью раскрыть всю мощь Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# В большинстве случаев администраторы удалят этот файл с сайтов с поддержкой/ и
# оставить его как ссылку на доступных сайтах, где он и дальше будет
# обновлено командой упаковки nginx.
#
# Этот файл будет автоматически загружать файлы конфигурации, предоставленные другими
# приложений, таких как Drupal или WordPress. Эти приложения будут сделаны
# доступен по пути с этим именем пакета, например /drupal8.
#
# Более подробные примеры см. в /usr/share/doc/nginx-doc/examples/.
##

# Конфигурация сервера по умолчанию
#
сервер {
    слушать 80 default_server;
    слушать [::]:80 default_server;

    # конфигурация SSL
    #
    # слушать 443 ssl default_server;
    # слушать [::]:443 ssl default_server;
    #
    # Примечание. Вы должны отключить gzip для трафика SSL.
    # См.: https://bugs.debian.org/773332
    #
    # Прочтите ssl_ciphers, чтобы обеспечить безопасную конфигурацию.
    # См.: https://bugs.debian.org/765782
    #
    # Самоподписанные сертификаты, созданные пакетом ssl-cert
    # Не используйте их на рабочем сервере!
    #
    # включить фрагменты/snakeoil.conf;

    корень /var/www/html;

    error_log /opt/logs/certbot_error отладка;
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.