Подавайте статический контент Jenkins с помощью Apache вместе с mod_proxy_ajp

Окружающая обстановка:

  1. Начинающий пользователь (это я) по всем указанным пунктам
  2. CentOS 6.4 x86_64
  3. OpenJDK 1.7.0_65
  4. Apache httpd 2.2.15 + mod_ssl 2.2.15 — действует как прокси, используя mod_proxy_ajp, никакого другого веб-приложения
  5. Jenkins 1.562 — работает только на порту ajp 8009, без веб-префикса

Я могу получить доступ к URL-адресу https://host/ и вижу пользовательский интерфейс jenkins. [Я не добавлял AllowEncodedSlashes NoDecode, ProxyRequests Off или nocanon, но, похоже, это работает... но для их значения я буду искать/задавать другой вопрос.]

Это единственная строка, которую я добавил к /etc/httpd/conf.d/ssl.conf (непосредственно перед </VirtualHost>, которая соответствует <VirtualHost _default_:443>):

ProxyPass / ajp://localhost:8009/

У меня сложилось впечатление, что выход на Дженкинса с Apache httpd будет означать

  1. Собственные двоичные файлы (вместо байт-кода Java) для обработки частей удаленного подключения.
  2. Возможность обслуживать статический контент (изображения, артефакты сборки, журналы консоли) без нагрузки на серверный процесс Jenkins.

Если это понимание правильное, я ищу правила конфигурации Apache httpd, которые позволят Apache httpd обслуживать статический контент из Jenkins. Я уже пробовал:

ProxyPass /static !

С участием

DocumentRoot "/var/cache/jenkins/war"

Но это ведет на необычную страницу (трудно идентифицировать как Дженкинс... Я не проверял ссылки). Когда я включил журнал доступа для Jenkins (через /etc/sysconfig/jenkins), появились такие записи (только выдержки, скопированные ниже):

/static/6a3788e2/scripts/yui
/static/6a3788e2/css/
/adjuncts/6a3788e2/lib/layout/breadcrumbs.css

Когда служба Jenkins перезапускается, появляется другой текст. Как настроить Apache httpd для отправки статического контента?

Я также пробовал размещать jenkins.war на tomcat (пакет tomcat6, развернутый через yum) на порту HTTP-коннектора по умолчанию 8080 (т.е. без mod_proxy_ajp). Каждый раз, когда я перезапускаю tomcat, элемент URL после static отличается.

PS: недостаточно кредитов для создания тега mod_proxy_ajp, используя вместо него mod_proxy. Тем не менее, я могу предложить награду в 50 кредитов. Пожалуйста, проголосуйте за вопрос, если вы считаете, что к этому были приложены искренние усилия.


person Parag Doke    schedule 05.09.2014    source источник
comment
Рассматривали ли вы вместо этого использование mod_cache_disk на /static? Кажется, это было бы проще, чем заставить Apache обслуживать статический контент из развернутого каталога WAR.   -  person John R    schedule 11.09.2014
comment
Может быть, вы просто хотите научиться делать это просто так, но иначе: что вы пытаетесь исправить, используя apache для обслуживания статических файлов? Действительно ли нагрузка на ваш процесс/машину jenkins настолько высока, что вам это нужно?   -  person Simon Groenewolt    schedule 11.09.2014
comment
@JohnR - Нет, я этого не пробовал. Учитывая, что я новичок в настройке веб-сервера, я прочитаю об этом и попробую. Спасибо за ваш комментарий.   -  person Parag Doke    schedule 20.09.2014
comment
@SimonGroenevolt - Артефакты сборки и журналы в моем случае имеют большой размер (часто до 500 МБ и около 50 МБ соответственно). Уменьшение детализации сборки не вариант. Учитывая, что доступ к серверу Jenkins осуществляется с разных континентов, да, я заметил падение производительности при загрузке больших файлов (но у меня нет статистики по одновременным загрузкам и т. д.).   -  person Parag Doke    schedule 20.09.2014
comment
@ParagDoke Я понимаю вашу точку зрения, хотя apache может улучшить производительность, я не думаю, что настройка с AJP или обратным прокси-сервером каким-либо образом предназначена для повышения производительности, но больше для создания нескольких сайтов. доступны через общую схему именования.   -  person Simon Groenewolt    schedule 22.09.2014
comment
@SimonGroenevolt Хорошо. Тогда мое предположение № 2 выше неверно. Тогда я продолжу, не запуская Jenkins за Apache Httpd. Спасибо за ваше время и внимание. Я только хотел бы вернуть кредиты, если награда не дает того, о чем просили (но это помогло мне правильно понять) :-).   -  person Parag Doke    schedule 22.09.2014


Ответы (2)


Вы хотите использовать ProxyPassMatch вместо ProxyPass, например:

ProxyPassMatch ^/(?!static/) ajp://localhost:8009/

Это должно проксировать только то, что не находится в /static. Обратите внимание, что вам может потребоваться настроить веб-корневой каталог для статического контента (но сначала вы можете проверить, работает ли он).

person llogiq    schedule 18.09.2014
comment
Извините, я не слежу. Каждый раз, когда служба Jenkins перезапускается, я вижу другой элемент URL после /static (из моего вопроса, часть 6a3788e2). - person Parag Doke; 20.09.2014

Как я уже упоминал в комментарии к вашему вопросу, предложенная вами настройка, скорее всего, не приведет к снижению нагрузки на Jenkins.

Вы можете уменьшить нагрузку на Jenkins, настроив Apache (или другой веб-сервер, например ngix, или прокси-сервер, например squid), как кэширующий прокси. Это, вероятно, (вам придется проверить) снимет часть нагрузки с jenkins. Однако, поскольку Jenkins по умолчанию не устанавливает дату истечения срока действия где-то в будущем для запросов к артефактам, прокси-серверу все равно придется проверять с помощью jenkins (надеюсь, возвращая 304 вместо полного файла) перед подачей содержимого клиенту. .

person Simon Groenewolt    schedule 22.09.2014