Назад | Перейти на главную страницу

Дженкинс за обратным прокси nginx в подкаталоге

Я изо всех сил пытаюсь настроить Jenkins в подкаталоге за nginx. На локальном хосте работают 2 приложения. Один из них - jenkins, который должен быть доступен на сайте foo.com/jenkins. Другое приложение находится на foo.com/.

Запросы к Дженкинсу не должны иметь /jenkins/ префикс, поэтому я его переписываю (удаляю). Но хотя начальная страница jenkins загружается, все ресурсы (js, css, ...) отсутствуют, и сайт выглядит некрасиво. Похоже, что у запросов нет префикса jenkins и они перенаправляются в другое приложение (см. Ссылку на снимке экрана).

Как я могу направить запрос со страницы jenkins правильному обработчику?

server {
    listen 80;
    server_name foo.com;  

    # jenkins server in subdir:      
    location ^~ /jenkins/ {
       rewrite ^/jenkins(.*) /$1 break;
       proxy_pass http://127.0.0.1:9500/;
    }
    # main app:
    location / {
        proxy_pass http://127.0.0.1:8081;
    }
}

Копировать вставить из документации:

Кроме того, вы должны убедиться, что Jenkins настроен для прослушивания запросов к папке / jenkins / (например, http://10.0.0.100:8080/jenkins/ вместо того http://10.0.0.100:8080/). Сделайте это, добавив параметр --prefix = / дженкинс в файл начальной конфигурации Jenkins по умолчанию. В моей системе (Ubuntu 12.04 LTS) файл конфигурации / и т.д. / по умолчанию / Дженкинс. Например, вот полный список параметров JENKINS_ARG (единственная часть, которую я добавил, была --prefix = / дженкинс):

JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpPort=$HTTP_PORT --ajp13Port=$AJP_PORT --prefix=/jenkins"

После настройки вы также должны установить URL-адрес, используемый пользовательским интерфейсом Jenkins, в Jenkins> Управление Jenkins> Местоположение Jenkins> URL Jenkins примерно так: "https: //domain.tld/jenkins/.

Использование разделения vhosts на nginx по подкаталогам, что вызывает некоторые проблемы:

  • по умолчанию Jenkins не прослушивает префикс, это означает, что нам нужна конфигурация в файле конфигурации запуска, добавьте prefix на JENKINS_ARG
  • после этого ваше основное приложение (foo.com) не должен использовать этот путь /jenkins больше, это не лучшая практика, потому что после /, весь путь маршрутизации должен принадлежать одному приложению foo.com

Я думаю, вы можете попробовать использовать поддомен, все указывают на IP вашего сервера (конфигурация на стороне DNS)

  • jenkins.foo.com
  • foo.com

Затем вы можете управлять vhost каждым серверным блоком nginx

upstream jenkins {
  server 127.0.0.1:8080 fail_timeout=0;
}

server {
  server_name foo.com
  ...
}

server {
  server_name jenkins.foo.com
  ...
}

Документы для справки: https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+Nginx