Проксирование серверных приложений Atlassian с помощью HTTP-сервера Apache (mod_proxy_http)

На этой странице объясняется, как установить топологию сети, в которой Apache HTTP Server действует как обратный прокси-сервер для серверных приложений Atlassian. Страница написана как рецепт успеха - мы рекомендуем вам следовать ей шаг за шагом.

Вы можете использовать обратный прокси-сервер, если хотите, чтобы пользователи обращались к приложениям Atlassian:

  • в своих собственных доменах, таких как http: // my <atlassianapp> .com /
  • в поддоменах другого домена, например http: // my <atlassianapp> .ourcompany.com /
  • в контекстных путях либо в домене, либо в поддомене, например, http://ourcompany.com/my <atlassianapp>
  • на разных HTTP-портах, таких как 9800, 9850 и т. д.

Для более сложных сценариев вы можете обратиться к документации сервера HTTP Apache, проконсультироваться с специалистом Apache в вашей организации, задать вопрос об ответах Atlassian или связаться с одним из наших экспертов Atlassian.

 

Инструкции на этой странице относятся к следующим серверным приложениям Atlassian:

  • Серверные приложения JIRA (JIRA Software Server, JIRA Core, JIRA Service Desk)
  • Confluence Server (в этом руководстве приведены некоторые дополнительные шаги и примеры для Confluence 6.0 и более поздних версий)
  • Сервер Bamboo
  • Сервер Bitbucket
  • FishEye
  • Crucible
  • Crowd

В следующих примерах на этой странице <atlassianapp> ссылается на имя любого из приложений сервера Atlassian  выше.

Серверные приложения Atlassian объединяют веб-сервер, который позволяет им запускаться без использования прокси-сервера. Для большинства атласских приложений связанным веб-сервером является Apache Tomcat (FishEye и Crucible использующего - Jetty). Следовательно, вам необходимо настроить Tomcat (или Jetty при использовании FishEye или Crucible) и Apache HTTP Server при проксировании приложения Atlassian.

На этой странице

Предпосылки

Вам понадобится следующее:

 

Установленная версия 2.2 или 2.4 Apache

Возможно, вам будет полезно обратиться к документации по серверу HTTP Apache, в которой описывается, как вы можете управлять HTTP-сервером Apache, редактируя файл httpd.conf.

 

Раздел модуля Apache mod_proxy особенно важен. Обратите внимание, что любые изменения, внесенные вами в файл httpd.conf, будут эффективны только после перезапуска Apache HTTP Server. (Приложения, использующие Synchrony, например Confluence 6.0, должны использовать Apache 2.4.10 и выше.)

Записи DNS и настройки для ваших доменов

Вы должны проверить, возможно, с вашим системным администратором или сетевым администратором, нужны  ли изменения в текущей конфигурации DNS для вашей организации  для поддержки топологии прокси, которую вы хотите настроить.

Приложения Atlassian установлены и доступны через веб-браузер

Установите приложения Atlassian обычным способом.

Приложения JIRA

Установка программного обеспечения JIRA

Confluence

Руководство по установке Confluence

Сервер Bamboo

Руководство по установке Bamboo

Сервер Bitbucket

Запуск установщика сервера Bitbucket

FishEye

Установка FishEye на Linux и Mac

 

Установка FishEye в Windows

Crucible

Установка Crucible на Linux и Mac

 

Установка Crucible на Windows

Crowd

Установка Crowd

 

Часть A. Настройка атласских приложений

В этом разделе описывается, как настроить веб-сервер Tomcat (или Jetty) в комплекте с каждым атласским приложением для работы за обратным прокси-сервером.

 

  1. Остановить применение Atlassian

Остановка приложения также останавливает Tomcat.

Приложения JIRA

Используйте эти команды в каталоге установки JIRA:

 

·         bin/start-jira.sh

·         bin/stop-jira.sh

В Windows используйте:

 

·         bin\start-jira.bat

·         bin\stop-jira.bat

См. Также сценарии запуска и завершения работы JIRA.

Confluence

Используйте эти команды из каталога установки Confluence:бен / start-

 

·         bin/start-confluence.sh

·         bin/stop-confluence.sh

В Windows используйте:

 

·         bin\start-confluence.bat

·         bin\stop-confluence.bat

См. Также "Запуск Confluence при запуске системы".

Сервер Bamboo

Используйте эти команды из каталога установки Bamboo:бен / start-

 

·         bin/start-bamboo.sh

·         bin/stop-bamboo.sh

В Windows используйте:

 

·         bin\start-bamboo.bat

·         bin\stop-bamboo.bat

См. Также «Запуск Bamboo» в качестве службы.

Сервер Bitbucket

См. Запуск и остановка сервера Bitbucket.

FishEye

Используйте эти команды из установочного каталога FishEye:

 

·         bin/start.sh

·         bin/stop.sh

В Windows используйте:

 

·         bin\start.bat

·         bin\stop.bat

См. Также Запуск FishEye в качестве службы Windows.

Crucible

Используйте эти команды в каталоге установки Crucible:

 

·         bin/start.sh

·         bin/stop.sh

В Windows используйте:

 

·         bin\start.bat

·         bin\stop.bat

См. Также «Запуск Crucible в качестве службы Windows».

Crowd

Используйте эти команды в каталоге установки Crowd:

 

·         /start_crowd.sh

·         /stop_crowd.sh

В Windows используйте:

 

·         \start-crowd.bat

·         \stop-crowd.bat

См. Также «Установка Crowd в качестве службы Windows».

 

2.Задайте путь контекста

Этот шаг требуется только в том случае, если вы хотите, чтобы приложение было доступно для доступа к контексту, например, http://ourcompany.com/ <contextpath>. Если это не требуется, вы можете пропустить этот шаг.

FishEye  и Crucible

Если вы проксимируете FishEye или Crucible, настройте  контекстный  веб-путь для Jetty из области администрирования. См. Настройка веб-сервера FishEye.

Приложения JIRA, Confluence, Bitbucket Server, Bamboo

Если вы проксируете любое из этих серверных приложений Atlassian, настройте путь контекста в файле Tomcat server.xml следующим образом.

Местоположение файла server.xml зависит от вашего приложения, операционной системы и места установки.

Обычными местами установки по умолчанию для приложений Atlassian являются:

 

Linux: / opt / atlassian / <имя-приложения>

Windows: C: \ Program Files \ Atlassian \ <имя-приложения>

Windows: C: \ Atlassian \ <имя-приложения>

Расположение в структуре папок приложения Atlassian:

Приложение

Местонахождение server.xml

Bamboo

<install-path>/conf/

Confluence

<install-path>/conf/

Crowd

<install-path>/apache-tomcat/conf/

Crucible

Как для FishEye.

FishEye

Конфигурационный файл FishEye - config.xml, см. Настройка веб-сервера FishEye и Как включить Fisheye / Crucible для прослушивания веб-запросов на дополнительных портах.

Приложения JIRA

<install-path>/conf/

Сервер Bitbucket 5.0

N / A, заменен на <Bitbucket home directory> /shared/bitbucket.properties

 

Прочитайте через Мигрирование от server.xml customizations к bitbucket.properties

Сервер Bitbucket 4.0 - 4.14

<Bitbucket home directory> /shared/server.xml

Stash 3.8 – 3.11

<Stash home directory>/shared/

 

Stash 3.7 and earlier

<install-path>/conf/

 

<install-path> обозначает, где приложение было установлено в вашей системе.

В файле конфигурации Tomcat server.xml для всех приложений, кроме Crowd, найдите директиву Context, которая выглядит так:


Context path="" docBase="${catalina.home}/atlassian-<atlassianapp>" reloadable="false" useHttpOnly="true">

Измените директиву, чтобы добавить новый контекстный путь:


<Context path="/<contextpath>" docBase="${catalina.home}/atlassian-<atlassianapp>" reloadable="false" useHttpOnly="true">

Используйте свое значение для <contextpath>. Как правило, каждое приложение будет использовать другой контекстный путь .

 

Важно, что значение пути имеет ведущую косую черту (/), такую как path = "/ <contextpath>", а не path = "<contextpath>".

 

Используйте эти инструкции для удаления контекста «crowd» из URL-адреса приложения

3. Настройте директиву коннектора

Если вы используете FishEye или Crucible, настройте прокси-хост, прокси-схему и прокси-порт из области администрирования. См. Настройка веб-сервера FishEye.

Если вы используете какие-либо другие серверные приложения Atlassian, настройте директиву Connector следующим образом.

 

Для каждого приложения найдите нормальную (не SSL) директиву Коннектора в файле Tomcat server.xml и добавьте атрибуты схемы,  proxyName и proxyPort в директиве Connector, как показано ниже. Используйте значения по умолчанию для других атрибутов, в том числе для порта, если у вас нет особых причин для их изменения, и используйте собственное доменное имя для значения proxyName:


<Connector port=<default>
maxThreads=<default>
minSpareThreads=<default>
connectionTimeout=<default>
enableLookups=<default>
maxHttpHeaderSize=<default>
protocol=<default>
useBodyEncodingForURI=<default>
redirectPort=<default>
acceptCount=<default>
disableUploadTimeout=<default>
proxyName="<subdomain>.<domain>.com"
proxyPort="80"
scheme="http"/>;

Обратите внимание, что для параметра proxyName должно быть установлено полное доменное имя (Fully Qualified Domain Name — «полностью определённое имя домена»), которое будет настроено для HTTP-сервера Apache. Это адрес, который пользователь вводит в свой браузер для доступа к приложению. Например:

  • используйте <atlassianapp> .ourcompany.com для доступа к приложению в поддомене, например http: // <atlassianapp> .ourcompany.com
  • используйте ourcompany.com для доступа к приложению в контексте пути, например http://ourcompany.com/ <atlassianapp>. В этом случае путь контекста не должен включаться в параметр proxyName, и вы уже установили директиву Context на шаге 2 выше.

Для получения дополнительной информации о настройке коннектора Tomcat см. Ссылку HTTP-коннектора Apache Tomcat 7.0.

Часть B. Настройка HTTP-сервера Apache

Atlassian рекомендует использовать модуль mod_proxy, который реализует прокси, шлюз или кеш для Apache, а также позволяет быть нескольким виртуальным хостам на одном клиенте.

Для получения дополнительной информации о mod_proxy см:

  • На сайте mod_proxy_html есть документация и примеры.
  • Учебник Apache Week, в котором описывается сложная ситуация с двумя приложениями и ProxyHTMLURLMap.

1. Включите модули mod_proxy в Apache

Если необходимо, включите необходимые модули в Apache следующим образом:

Распределения Debian и Ubuntu относятся к Apache как «Apache2», а файл конфигурации apache2.conf хранится в каталоге / etc / apache2 /.

 

Вы можете включить mod_proxy и поддерживающие модули из командной строки следующим образом:


$ sudo a2enmod proxy_http
Рассмотрение зависимостей прокси-сервера для proxy_http:
Включение прокси-сервера модуля.
Включение модуля proxy_http.
Чтобы активировать новую конфигурацию, вам необходимо запустить:
service apache2 restart

Fedora и CentOS 7 ссылаются на Apache как «httpd» и включают модули mod_proxy по умолчанию. При необходимости вы можете найти файлы конфигурации в каталогах / etc / httpd / conf /, /etc/httpd/conf.d/ и /etc/httpd/conf.modules.d/.

 

Для получения дополнительной информации о том, как обрабатываются файлы конфигурации, см.

Если вы используете Confluence 6.0 или более позднюю версию с Synchrony (требуется для совместного редактирования), вам нужно будет использовать Apache 2.4.10 или новее, а также убедитесь, что модули mod_proxy_wstunnel и mod_rewrite включены.

Windows относится к Apache как «httpd», с конфигурационным файлом, хранящимся в папке \ conf \ httpd.conf.

 

Включите mod_proxy и поддерживающие модули в конфигурационном файле Apache httpd.conf, раскомментируя (то есть удалите ведущие «#») следующие строки, если необходимо:


LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Если эти строки не существуют в файле конфигурации, просто добавьте их.

 

Если вы используете Confluence 6.0 или более позднюю версию с Synchrony (требуется для совместного редактирования), вам нужно будет использовать Apache 2.4.10 или новее, а также включить модули mod_proxy_wstunnel и mod_rewrite.

2. Настройка виртуальных хостов с помощью mod_proxy

Если вы используете одно приложение Atlassian за обратным прокси-сервером Apache, используйте виртуальный хост-блок со следующими директивами:


<VirtualHost *:80>
    ServerName <subdomain>.<domain>.com
     
    ProxyRequests Off
    ProxyVia Off
     
    <Proxy *>
         Require all granted
    </Proxy>
 
    ProxyPass /<contextpath> http://<internal_domain>:<port>/<contextpath>
    ProxyPassReverse /<contextpath> http://<internal_domain>:<port>/<contextpath>
</VirtualHost>

  • Обратите внимание, что для CentOS предпочтительным подходом является добавление блока виртуального хоста в отдельный файл конфигурации для каждого приложения в /etc/httpd/conf.d/, например, с именем confluence-vhost.conf и jira-vhost.conf.
  • Обратите внимание, что для Debian предпочтительный подход заключается в добавлении блока виртуального хоста в отдельный файл конфигурации для каждого приложения в / etc / apache2 / sites-available / <site>, например, с именем confluence.conf и / или jira.conf. Они должны основываться на шаблоне по умолчанию, 000-default.conf.

Если у вас несколько приложений, работающих за одним и тем же прокси-сервером, вы можете использовать виртуальные хосты на основе имени:

  • Используйте один виртуальный хост на основе имени, если приложения Atlassian находятся в одном домене, но имеют разные пути контекста. Например:

<VirtualHost *:80>
    ServerName mycompany.com
     
    ProxyRequests Off
    ProxyVia Off
     
    <Proxy *>
         Require all granted
    </Proxy>
 
    ProxyPass /jira http://<internal_domain>:8080/jira
    ProxyPassReverse /jira http://<internal_domain>:8080/jira
 
    ProxyPass /bitbucket http://<internal_domain>:7990/bitbucket
    ProxyPassReverse /bitbucket http://<internal_domain>:7990/bitbucket
</VirtualHost>

  • Используйте несколько виртуальных хостов на основе имени, если каждое приложение находится в другом домене. Например:

<VirtualHost *:80>
    ServerName myjira.com
     
    ProxyRequests Off
    ProxyVia Off
     
    <Proxy *>
         Require all granted
    </Proxy>
 
    ProxyPass /jira http://<internal_domain>:8080/jira
    ProxyPassReverse /jira http://<internal_domain>:8080/jira
</VirtualHost>
 
<VirtualHost *:80>
    ServerName mybitbucket.com
     
    ProxyRequests Off
    ProxyVia Off
     
    <Proxy *>
         Require all granted
    </Proxy>
 
    ProxyPass /bitbucket http://<internal_domain>:7990/bitbucket
    ProxyPassReverse /bitbucket http://<internal_domain>:7990/bitbucket
</VirtualHost>

If you're using Confluence 6.0 or later with Synchrony (which is required for collaborative editing),  you'll need to use Apache 2.4.10 or later...

Используйте следующие директивы и блоки местоположения в блоке виртуального хоста:

 

Используйте директивы / местоположения в точном порядке, указанном ниже. Не меняйте порядок.


<VirtualHost *:80>
    ServerName myconfluence.com
 
	ProxyRequests Off
	
	# Auth changes in 2.4 - see http://httpd.apache.org/docs/2.4/upgrading.html#run-time
	<Proxy *>
		Require all granted
	</Proxy>

	ProxyPass /synchrony http://<internal_domain>:8091/synchrony

	<Location /synchrony>
		Require all granted
		RewriteEngine on
		RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
		RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
		RewriteRule .* ws://<internal_domain>:8091%{REQUEST_URI} [P]
	</Location>

	ProxyPass / http://<internal_domain>:8090/
	ProxyPassReverse / http://<internal_domain>:8090/

	<Location />
		Require all granted
	</Location>
 
</VirtualHost>

Это базовый пример, когда доступ к Confluence осуществляется без контекстного пути и не использует внутренний прокси Confluence. См. «Администрирование совместного редактирования» для других параметров конфигурации прокси.

Для получения дополнительной информации о виртуальных хостах см. https://httpd.apache.org/docs/2.4/vhosts/.

 

Эти директивы внутри блока виртуального хоста выполняют следующие функции:

Директива

Функция


<VirtualHost *:80>

 

 

Настроить директивы для конкретного виртуального хоста

Используйте символ * в качестве подстановочного знака для соответствия всем IP-адресам с портом по умолчанию 80. Это приводит к тому, что Apache соответствует запросам значений ServerName виртуальных хостов.

 

См. Документацию Apache 2.4 VirtualHost.


ServerName <subdomain>.<domain>.com

Определение сервера

Директива ServerName может использоваться для установки схемы запроса, имени хоста и порта, которые сервер использует для идентификации.

 

Примеры:

www.example.comjira.example.com

Директива ServerName не должна включать контекстный путь.

 

См. Документацию Apache 2.4 ServerName.


ProxyRequests Off

Отключение прокси-сервера

Эта директива сообщает Apache отключить прокси-сервер. Вам нужно включить эту директиву только в том случае, если вы используете Apache HTTP Server как просто обратный прокси, а не как прямой прокси-сервер.

 

См. Документацию Apache 2.4 ProxyRequests.


ProxyVia Off

Контрольные заголовки в прокси-запросе

Директива ProxyVia контролирует использование HTTP-заголовка Via: HTTP прокси, чтобы контролировать поток запросов прокси по цепочке прокси-серверов. Установите ProxyVia в положение «Выкл.», чтобы предотвратить переопределение другой глобальной конфигурации.

 

См. Документацию Apache 2.4 ProxyVia.


<Прокси *>
Require all granted (Требовать все предоставленные)
</ Proxy>

Разрешить проксирование приложения Atlassian из любого места

Строго говоря, этот шаг не нужен, поскольку по умолчанию доступ к прокси-ресурсам неограничен. Тем не менее мы явно разрешаем доступ к атласскому приложению с любого хоста, чтобы эта политика применялась независимо от любых последующих изменений в элементах управления доступом на глобальном уровне. Директива Proxy предоставляет контекст для директив, которые содержатся в его разделительных тегах. В этом случае мы указываем URL-адрес wild-card (звездочка), который применяет содержащуюся директиву ко всем прокси-запросам.

См. Документацию Apache 2.4 Proxy.

Обратите внимание, что для Apache 2.2 вам нужно использовать следующее:


<Прокси *>
Order Deny,Allow (Отменить заказ, разрешить) Allow from all  (Разрешить от всех) </ Proxy>

Директива Order управляет порядком, в котором применяются любые директивы Allow и Deny. В приведенной выше конфигурации мы указываем «Deny, Allow», которая сообщает Apache HTTP Server применять все директивы Deny, и если есть любое совпадение, запрос отклоняется, если он также не соответствует директиве Allow. Фактически, «Запретить, Разрешить» является значением по умолчанию; мы включаем его только ради ясности. Обратите внимание, что мы указываем одну директиву Allow, которая описана ниже, и не указывайте какие-либо директивы Deny. Директива Allow в этом контексте контролирует, какие хосты могут получить доступ к Atlassian-приложению через HTTP-сервер Apache. Здесь мы указываем, что всем хостам разрешен доступ.

 

См. Документацию Apache 2.2 Proxy.


ProxyPass /<contextpath> http://<domain>:<port>/<contextpath>
ProxyPassReverse /<contextpath> http://<domain>:<port>/<contextpath>

Эти директивы сообщают Apache HTTP Server пересылать запросы формы http://example.com/* на порт 8080 на том же компьютере, который является портом, который мы настроили Tomcat для прослушивания выше.

В приведенном ниже примере показано, как использовать описанный выше путь контекста (/ <contextpath>) с помощью mod_ajp. Если вы не используете контекстный путь, вы можете опустить <contextpath> из ваших директив ProxyPass и ProxyPassReverse, добавив '/' после имени домена или порта:


ProxyPass        /<contextpath> http://example:8080/<contextpath>
ProxyPassReverse /<contextpath> http://example:8080/<contextpath>

В приведенном ниже примере показано, как получить доступ к приложению в субдомене private.example.com с помощью пути контекста / <contextpath> и подключения к Tomcat на порте 9900:


ProxyPass        /<contextpath> http://private.example.com:9900/<contextpath>
ProxyPassReverse /<contextpath> http://private.example.com:9900/<contextpath>

Обратите внимание, что вы можете использовать localhost вместо <domain>, если вы используете приложение Atlassian на том же компьютере, что и Apache.

 

Не используйте конечный «/» после контекстного пути.

См. Документацию Apache 2.4 ProxyPass и ProxyPassReverse

 

3. Перезапустите Apache

Debian и Ubuntu

Перезапустите Apache из командной строки, используя:


$ sudo service apache2 restart

Fedora and CentOS

Перезапустите Apache из командной строки, используя:


$ sudo apachectl graceful

 

Вы также можете использовать systemd для перезапуска Apache. Например, в CentOS используйте:


$ sudo systemctl restart httpd.service

Windows

Вы можете остановить и запустить службу Apache, выбрав «Панель управления»> «Администрирование»> «Службы», найдите «Apache2» и выберите его. Теперь в строке меню выберите кнопку остановки (квадрат) и дождитесь, пока статус службы изменится на «Остановлен». Как только служба остановилась, выберите кнопку запуска (треугольник) и дождитесь, пока статус изменится на «Начать».

4. Измените политику CentOS SELinux.

Для CentOS политика SELinux блокирует подключение httpd к сети по умолчанию. В этом случае вы увидите сообщение об отказе в доступе в httpd error_log, подобное этому:


[Sat Mar 19 00:29:45.722758 2016] [proxy:error] [pid 5958] (13)Permission denied: AH00957: HTTP: attempt to connect to 127.0.0.1:8090 (localhost) failed

Вам необходимо вручную изменить политику SELinux для процесса httpd, используя следующую команду:


$ sudo /usr/sbin/setsebool -P httpd_can_network_connect 1

 

5. Включите заголовок X-Forwarded-For

Это необязательный шаг, который гарантирует, что исходный IP-адрес (т.е. пользователь, подключающийся к прокси-серверу) отправляется в приложение Atlassian, а не через прокси-IP. Это полезно для отслеживания того, кто отправляет запросы, так как в противном случае обратный прокси-сервер может маскировать свой IP-адрес. Если это изменение будет выполнено, журналы доступа будут записывать IP-адрес клиента, а также прокси-сервер, а не только прокси-сервер. Для этого:

  1. Включить модуль mod_remoteip.
  2. Добавьте ниже соответствующий виртуальный хост:

RemoteIPHeader X-Forwarded-For

  1. Перезапустите / перезагрузите Apache.

Часть C. Окончательная конфигурация

Перезапустите каждое приложение

Теперь перезапустите каждое приложение и убедитесь, что вы можете получить к ним доступ с использованием новых URL-адресов. См. Инструкции по остановке и запуску выше.

Задайте базовый URL приложения

Для каждого приложения Atlassian установите базовый URL-адрес для адреса, который вы настроили в прокси-сервере, который является URL-адресом, который будет обслуживать HTTP-сервер Apache (например, http://www.example.com/<atlassianapp>).

Приложения JIRA

Настройка базового URL-адреса

Confluence

Настройка URL-адреса сервера

Сервер Bamboo

Указание URL-адреса Bamboo

Сервер Bitbucket

Указание базового URL-адреса для сервера Bitbucket

FishEye

См. «URL сайта» в разделе «Настройка веб-сервера FishEye».

Crucible

Как для FishEye

Crowd

Как изменить базовый URL Crowd

 

Отключить HTTP-сжатие

Запуск сжатия как для прокси, так и для Tomcat может вызвать проблемы при интеграции одного приложения Atlassian с другим. Мы рекомендуем отключить HTTP-сжатие для приложений JIRA и Confluence:

  • Приложения JIRA - см. Настройка параметров приложения Jira.
  • Confluence - см. «Сжатие HTTP-ответа в Confluence».