У меня в работе есть система Jira и Confluence. Оба работают на одних и тех же серверах. Фактические URL-адреса для доступа к Jira и Confluence:
http://foauslxapp05:8080/jira
http;//foauslxapp05:8090/confluence
или с полным именем хоста:
http://foauslxapp05.foservices.corp:8080/jira
http://foauslxapp05.foservices.corp:8090/confluence
Чтобы все упростить, я установил правило прокси, позволяющее пользователям делать это:
http://foauslxapp05/jira <-- Accessing Jira
http://foauslxapp06/wiki <-- Accessing Confluence
Наши специалисты создали пару псевдонимов серверов для foauslxapp05
, так что:
http://jira/jira <-- Accessing Jira
http://jira.foservices.corp/jira <-- Accessing Jira
http://wiki/wiki <-- Accessing Confluence
http://wiki.foservices.corp/wiki <-- Accessing Confluence
Что мне действительно хотелось бы сделать, так это перейти к следующему шагу:
http://jira <-- Accessing Jira
http://jira.foservices.corp <-- Accessing Jira
http://wiki <-- Accessing Confluence
http://wiki.foservices.copr <-- Accessing Confluence
Проблема, конечно, в том, что имена DNS Джира и вики являются просто псевдонимами DNS для foauslxapp05. Мне нужно определить URL-адрес, который ввел пользователь (т.е. какой хост запросил пользователь), а затем на основе этого URL-адреса мне нужно перенаправить пользователя в правильное приложение.
Я даже не совсем уверен, на что мне следует смотреть: это VirtualHost? mod_rewrite? mod_proxy? Или это что-то совсем другое. Я не могу представить, чтобы что-то подобное было слишком сложно сделать. К сожалению, я не слишком хорошо знаком с Apache httpd.
Вы можете сделать это, используя переменную ServerAlias в конфигурации вашего виртуального хоста, этот элемент конфигурации может поддерживать список имен / псевдонимов серверов:
Вам нужны виртуальные хосты на основе имен. Поскольку вы, вероятно, получите много плохих советов о том, как это структурировать, я предлагаю следующий хороший и ясный (возможно, слегка дублированный) способ сделать это.
Но прежде чем начать, я хотел бы сказать: как Crowd вписывается в эту картину (Crowd является частью SSO, которая довольно хорошо объединяет Jira и Confluence). В нашем развертывании у нас есть jira.example.com/jira, jira.example.com/confluence, и то же самое для / толпы, / servicedesk и всего, что будет дальше. Вы можете подумать, как будет развиваться ваше решение (я не говоря, что ваше решение плохое или даже хуже нашего, но об этом нужно помнить).
Хорошо, к конфигурации. Вам необходимо сообщить Apache, что вы используете виртуальный хостинг на основе имен по HTTP и HTTPS.
# Look in /etc/httpd/conf/httpd.conf
NameVirtualHost *:443
NameVirtualHost *:80
Предположительно, у вас установлен mod_ssl и mod_proxy_ajp для обратного прокси-сервера обратно к сервлетам tomcat, предоставляющим вам Jira / Confluence и т. Д.
Надеюсь, вы знакомы с настройкой mod_ssl, поэтому у вас есть сертификаты и т. Д. У меня нет опыта работы с SNI (и если вы все еще используете RHEL5, это не вариант, но вы не сказали, какую версию RHEL вы используете), поэтому я предполагаю, что у вас есть сертификат SAN с такими именами, как:
Если вы используете RHEL5 или RHEL6, вам нужно service httpd stop
; отредактируйте / etc / sysconfig / httpd и включите рабочий MPM (раскомментируйте строку HTTPD), что даст вам лучшую масштабируемость; затем service httpd start
. RHEL7 использует httpd 2.4 по умолчанию и, как мне кажется, имеет более новый MPM событий, который был бы лучше, чем любой из предыдущих.
Отредактируйте /etc/httpd/conf/httpd.conf и закомментируйте любые модули (LoadModule ...), которые не нужны. Если вы не знаете, делайте по несколько за раз и используйте apachectl configtest
вам нужно протестировать свою конфигурацию, так как конфигурация по умолчанию потребует их несколько.
Пока вы там, я бы рекомендовал включить KeepAlives; очень хороший прирост производительности.
Я собираюсь поместить все эти виртуальные хосты в /etc/httpd/conf.d/sites.conf. Я надеюсь, вы оцените очевидное дублирование, но разделение каждого имени / услуги на разные разделы VirtualHost добавляет большую ясность.
Я начну с базовой структуры, показывающей все сайты (jira и слияние), а затем конкретизирую виртуальный хост для jira (другой будет довольно похож).
<VirtualHost *:80>
ServerName jira.example.com
</VirtualHost>
<VirtualHost *:443>
ServerName jira.example.com
</VirtualHost>
<VirtualHost *:80>
ServerName confluence.example.com
</VirtualHost>
<VirtualHost *:443>
ServerName confluence.example.com
</VirtualHost>
Хорошо, это довольно высокий уровень; Давайте подробнее рассмотрим виртуальные хосты jira. Во-первых, я определяю виртуальный хост для доступа по HTTP, который просто перенаправляет на HTTPS.
<VirtualHost *:80>
ServerName jira.example.com
ErrorLog ...
CustomLog ...
Redirect 301 / https://jira.example.com/
</VirtualHost>
На сайте HTTPS все действия:
<VirtualHost *:443>
ServerName jira.example.com
SSLEngine On
SSLProtocol all -SSLv2 -SSLv3
# The following could be tigher...
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
# If using a SAN certificate, the following would be the same for crowd
SSLCertificateFile /etc/pki/tls/certs/jira_etc.pem
SSLCertificateKeyFile /etc/pki/tls/private/jira_etc.key
SSLCertificateChainFile /etc/pki/tls/certs/jira_etc.pems
ErrorLog ... # don't forget log rotation
CustomLog ...
# Enough boilerplate, down to Jira specifics. Check which ports are
# used for each or jira/confluence etc. The command (as root or as
# the account running the apps) may be helpful. You want the AJP port;
# not the HTTP port.
#
# 'lsof -Pni | grep LISTEN | grep java'
# Speed boost
AddOutputFilterByType DEFLATE text/html text/plain text/xml
ProxyPass / ajp://127.0.0.1:8009/jira
ProxyPassReverse / ajp://127.0.0.1:8009/jira
</VirtualHost>
СОВЕТ. Одна вещь, о которой стоит подумать: что вы хотите, если люди пойдут, скажем, http: //foauslxapp05.foservices.corp/ (сайт по умолчанию) или напрямую на IP-адрес сервера? Я предлагаю вам ответить либо 404 (не найдено), либо 403 (запрещено). Вот фрагмент, который вы можете использовать в качестве домашнего задания. Использовать httpd -S
чтобы получить очень полезную сводку о том, какие сайты определены в вашей текущей конфигурации (не running-config, а файлы конфигурации, как они есть в настоящее время), и обратите внимание, что порядок имеет значение (еще одна причина, по которой я поместил все это в conf.d / sites. conf, а не conf.d / jira.conf и conf.d / confluence.conf и т. д.
<VirtualHost _default_:80>
RewriteEngine On
RewriteRule ^ - [R=404,L]
</VirtualHost>
Я предлагаю вам сделать то же самое для https-сайта по умолчанию в conf.d / ssl.conf
Надеюсь, вы нашли этот пост полезным и информативным.
Ура, Кэмерон