ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как настроить Jenkins с помощью SSL и обратного прокси Nginx

Как настроить Jenkins с помощью SSL и обратного прокси Nginx

Введение

По умолчанию, Jenkins приходит со своим собственным встроенным веб-сервером Winstone, который прослушивает порт 8080, что удобно для начала работы. Как только вы серьезно возьметесь за использовании Jenkins, необходимо обеспечить его с помощью SSL для защиты паролей и других конфиденциальных данных, передаваемых через веб-интерфейс.

В этой статье мы покажем, как настроить Nginx в качестве обратного прокси-сервера, чтобы направлять запросы клиентов Jenkins. Для того, чтобы начать, вам необходимо выполнить каждое условие из указанных ниже.

Условия

Один сервер Ubuntu 16,04 сконфигурированный с внекорневым sudo пользователем и брандмауэром, следуя как в статье руководство по первоначальной настройки сервера на Ubuntu 16.04 с установленными Jenkins и Nginx.

Когда вы выполнили эти требования, вы готовы начать.

Шаг первый – Настройка Nginx

В предварительных требованиях статьи как обеспечить Nginx с Encrypt Давай на Ubuntu 16.04, мы настроили Nginx использовать SSL в файле /etc/nginx/sites-available/default, так что мы будем откроем этот файл, чтобы добавить наши настройки обратного прокси – сервера.

sudo nano /etc/nginx/sites-available/default

 

Во- первых, мы добавим конкретный доступ и журналы ошибок в блок server с параметрами конфигурации SSL:

/etc/nginx/sites-available/default
. . . 
server {
        # SSL Configuration
        #
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
        access_log            /var/log/nginx/jenkins.access.log;
        error_log            /var/log/nginx/jenkins.error.log;

 

Затем мы настроим параметры прокси – сервера. Так как мы посылаем все запросы к Jenkins, мы закомментируйте по умолчанию строку try_files, которая, как написано, будет возвращать ошибку 404 , прежде чем запрос достигнет Jenkins.

/etc/nginx/sites-available/default
 . . .
           location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;        }
. . .

 

Затем мы добавим фактические параметры прокси – сервера. Конфигурация начинается в Nginx с установкой proxy_params которые обеспечивают такую информацию, как имя хост, протокол запроса клиента, а также IP – адрес клиента, которые будут доступны в нашем логе – файле. Далее, proxy_pass устанавливает протокол и адрес проксируемого сервера, который в нашем случае является сервером Jenkins, который доступен на локальный хост по порту 8080. Затем мы увеличиваем proxy_read_timeout  с 60 по умолчанию в Nginx до рекомендуемого значения 90. И, наконец, мы добавим proxy_redirect чтобы гарантировать включение соответствующего имени хоста.

Обязательно замените свое SSL-защищенное имя домена в proxy_redirect, как в строке ниже:

/etc/nginx/sites-available/default
Location /  
. . .
           location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;
                include /etc/nginx/proxy_params;
                proxy_pass          http://localhost:8080;
                proxy_read_timeout  90s;
                # Fix potential "It appears that your reverse proxy set up is broken" error.
                proxy_redirect      http://localhost:8080 https://your.ssl.domain.name;

 

После того как вы сделали эти изменения, сохраните и закройте файл. Мы не собираемся перезагружать Nginx, пока мы не настроили Jenkins, но мы протестируем нашу конфигурацию:

sudo nginx -t

 

Если все хорошо, то команда возвращает:

Вывод
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

Если нет, то исправить все обнаруженные ошибки, пока тест не будет пройден.

Примечание:
Если вы неправильно установите proxy_pass(например, добавите слэш), вы получите что – то похожее на следующее на странице Configuration Jenkins.

Ошибка Jenkins: Настройка обратного прокси неверна

Если вы видите эту ошибку, проверьте настройки proxy_pass и proxy_redirect в конфигурации Nginx.

Шаг второй – Настройка Jenkins

Jenkins для работы с Nginx, необходимо обновить конфигурацию Jenkins, чтобы сервер Jenkins слушал только интерфейс localhost, а не все интерфейсы ( 0.0.0.0). Если Jenkins слушает все интерфейсы, то это потенциально доступно на незашифрованном порте ( 8080).

Мы изменим конфигурационный файл /etc/default/jenkins, чтобы сделать эти изменения.

sudo nano /etc/default/jenkins

 

Найдите строку JENKINS_ARGS и добавьте --httpListenAddress=127.0.0.1 к существующим аргументам:

/etc/default/jenkins
. . .
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"

 

Сохраните и закройте файл.

Чтобы использовать новые параметры конфигурации, мы перезапустим Jenkins и Nginx.

sudo systemctl restart jenkins

 

Так как systemctl не отображает вывод, мы проверим статус:

sudo systemctl status jenkins

 

Мы должны видеть статус active (exited) в строке Active:

Вывод
● jenkins.service - LSB: Start Jenkins at boot time
   Loaded: loaded (/etc/init.d/jenkins; bad; vendor preset: enabled)
   Active: active (exited) since Tue 2017-04-25 22:37:29 UTC; 5s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 11360 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)
  Process: 11391 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)

 

Мы повторим эти шаги для Nginx:

sudo systemctl restart nginx

 

sudo systemctl status nginx

 

Вывод
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-04-25 22:36:08 UTC; 2min 51s ago
  Process: 11339 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=
  Process: 11349 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 11345 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUC
 Main PID: 11353 (nginx)

 

Теперь, когда мы перезапустим оба сервера, мы должны в состоянии посетить домен с помощью либо HTTP или HTTPS. HTTP запросы будут автоматически перенаправлены на HTTPS, а сайт Jenkins будет обслуживаться надежно.

Шаг третий – Тестирование конфигурации

Мы будем тестировать конфигурацию путем сброса пароля администратора, когда мы включили шифрование. Мы начнем с посещения сайта с помощью http чтобы убедиться, что мы заходим в Jenkins и перенаправляемся на https, как мы ожидали:

В вашем веб – браузере, введите «HTTP: // your.ssl.domain.name », подставляя свой домен вместо your.ssl.domain.name. После нажатия клавиши ввода, URL должен начинаться с https и зеленый замок укажет, что соединение является безопасным.

Убедитесь, что Jenkins обслуживается через протокол HTTPS

Мы войдем admin в поле «User» и автоматически сгенерируем пароль, Jenkins создаст и хранит, когда мы его установили.

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

 

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

Перейдите к странице администратора пароля Jenkins

Нажмите кнопку «admin» в верхнем правом углу и выберите «Настройка» из выпадающего меню. Введите и подтвердите новый пароль и нажмите кнопку «Сохранить». Теперь вы можете использовать веб-интерфейс Jenkins надежно.

Вывод

В этом учебном пособии, после выполнения предварительных установок, мы настроили Nginx в качестве обратного прокси – сервера для встроенного веб – сервера Jenkins для того, чтобы защитить нашу информацию, передаваемую через веб – интерфейс. Если вы новичок в Jenkins, вы можете начать с учебника «Начало работы проекта с Jenkins: Создайте свой первый Pipeline.

Exit mobile version