Статьи

HTTP-сервер Apache с Tomcat по SSL

Вступление

Недавно мне нужно было смоделировать нашу производственную среду развертывания на моем локальном компьютере. Наши производственные приложения работают на HTTP-сервере Apache. Мы разворачиваем приложение на нескольких экземплярах Tomcat, а также на разных Tomcats для разных пространств имен URL. HTTP-сервер Apache отвечает за все это. HTTP-сервер Apache подключается к коту с помощью mod_jk через mod_ssl. Когда HTTP-сервер Apache получает запрос, он проверяет запросы и пересылает их коту соответственно. Эта конфигурация важна для безопасности и кластеризации.

Этот учебник содержит следующие разделы.

  1. Установка и настройка HTTP-сервера Apache.
  2. Установка и настройка Apache Tomcat.
  3. Установка и настройка mod_jk.
  4. Конфигурирование mod_ssl.
  5. Тестирование среды.

Установка и настройка HTTP-сервера Apache.

Выполните следующую команду, чтобы загрузить Apache HTTP-сервер 2.2.22

1
2
3
wget http://mirrors.gigenet.com/apache//httpd/httpd-2.2.22.tar.bz2
wget http://www.apache.org/dist/httpd/httpd-2.2.22.tar.bz2.md5
md5sum -c httpd-2.2.22.tar.bz2.md5

После выполнения вышеуказанной команды архив httpd-2.2.22.tar.bz2 будет загружен в вашу папку «Загрузки». Чтобы извлечь архивированный файл архива, выполните следующую команду из папки / Downloads.

1
2
cd /home/semika/Downloads
tar -xjvf httpd-2.2.22.tar.bz2

Вышеприведенная команда распакует архивированный архив в папку httpd-2.2.22 в папке Downloads. Теперь вы должны решить, куда вы собираетесь установить HTTP-сервер Apache. Я собираюсь установить его в папку /home/semika/httpd-2.2.22. Вы должны создать папку там. Перейдите в папку пользователя и выполните следующую команду, чтобы создать новую папку.

1
2
cd /home/semika
mkdir httpd-2.2.22

Чтобы установить Apache для вашей конкретной платформы, нам нужно скомпилировать дистрибутив исходного кода, который мы уже скачали. Если вы внимательно посмотрите в извлеченную папку в Downloads / httpd-2.2.22, вы увидите, что есть скрипт configure . Мы можем скомпилировать исходный дистрибутив с помощью этого скрипта, и он создаст необходимые компоненты для установки HTTP-сервера Apache.

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

Поскольку нам нужно сконфигурировать mod_ssl для компиляции Apache, нам нужно установить пакет разработки OpenSSL. В противном случае компиляция вызовет исключение. Чтобы установить библиотеки разработки OpenSSL, выполните следующую команду.

1
sudo apt-get install openssl libssl-dev

Иногда вам также может понадобиться выполнить следующую команду, если вы столкнулись с ошибкой во время компиляции Apache.

1
2
sudo apt-get install zlib1g-dev
sudo apt-get install libxml2-dev

Чтобы скомпилировать исходный дистрибутив Apache, выполните следующие команды.

1
2
3
cd /home/semika/Downloads/httpd-2.2.22
 
./configure --prefix=/home/semika/httpd-2.2.22 --enable-mods-shared=all --enable-log_config=static --enable-access=static --enable-mime=static --enable-setenvif=static --enable-dir=static -enable-ssl=yes

–Prefix : вы можете указать каталог установки
–Enable-mods-shared : установка этого параметра на «all» позволит установить все общие модули.
–Enable-ssl : так как мы собираемся настроить HTTP-сервер Apache с mod_ssl, было установлено «да» для компиляции Apache с mod_ssl. По умолчанию эта опция отключена.

Другие параметры, указанные в команде конфигурации, см. В справочной документации по полным параметрам. После успешного выполнения вышеуказанной команды выполните следующие команды. Прежде чем выполнить следующую команду, просто посмотрите на указанный вами каталог установки, то есть: /home/semika/httpd-2.2.22 , вы можете увидеть, что он все еще пуст.

1
2
make
make install

Теперь вы можете видеть, что HTTP-сервер Apache установлен в /home/semika/httpd-2.2.22. Ищите папку модулей, вы можете увидеть список установленных модулей. Убедитесь, что он установил mod_ssl.so . Теперь вы можете запустить HTTP-сервер Apache.

1
2
cd /home/semika/httpd-2.2.22/bin
sudo ./apachectl start

Если вы видите ниже линию при выполнении вышеупомянутой команды,

« Httpd: не удалось надежно определить полное доменное имя сервера, используя 127.0.1.1 для ServerName »

отредактируйте ваш файл /httpd-2.2.22/conf/httpd.conf следующим образом. Найдите свойство « ServerName » в файле httpd.conf . Вы увидите следующую строку там.

1
#ServerName www.example.com:80

Раскомментируйте эту строку и измените ее следующим образом.

1
ServerName localhost

Снова запустите сервер Apache HTTP. Если вы не изменили порт по умолчанию, на котором работает сервер Apache, проверьте следующий URL-адрес, чтобы проверить, запущен сервер или нет. Порт HTTP-сервера Apache по умолчанию — 80.

HTTP: // локальный /

По указанному выше URL-адресу, если вы видите страницу с надписью «Это работает», вы работаете с HTTP-сервером Apache.

Кроме того, если вы хотите изменить порт по умолчанию, вы можете отредактировать файл httpd.conf следующим образом. Ищите свойство «Listen» и меняйте его по своему желанию.

Я установил его на 7000. Поэтому мой HTTP-сервер Apache работает на 7000. Мне нужно получить доступ к следующему URL-адресу, чтобы получить страницу «Это работает».

HTTP: // локальный: 7000 /

Чтобы остановить HTTP-сервер Apache, выполните следующую команду.

1
2
cd /home/semika/httpd-2.2.22/bin
sudo ./apachectl stop

Установка и настройка Apache Tomcat.

Установка и настройка Apache tomcat не так уж важны, если вы используете такую ​​предварительную настройку. Для полноты урока я объясню это немного. Я использую Apache Tomcat 7.0.25. Вы можете скачать его с веб-сайта Apache и распаковать в какой-нибудь каталог вашего локального компьютера. После этого вы должны установить переменную окружения следующим образом.

1
2
export CATALINA_HOME=/home/semika/apache-tomcat-7.0.25
export PATH=$CATALINA_HOME/bin:$PATH

Вы можете запустить кота с помощью следующей команды.

1
2
cd home/semika/apache-tomcat-7.0.25/bin
./startup.sh

Если вы хотите, чтобы консоль Tomcat была запущена, выполните следующие команды перед запуском Tomcat.

1
2
cd home/semika/apache-tomcat-7.0.25/logs/
tail -f catalina.out

После успешного запуска кота попробуйте следующий URL

HTTP: // локальный: 8080 /

По умолчанию tomcat будет работать на порту 8080. Теперь наш HTTP-сервер Apache работает на порту 7000, а tomcat на 8080.

Кроме того, для настройки Tomcat с сервером Apache HTTP нам нужно создать файл worker.properties в каталоге home / semika / apache-tomcat-7.0.25 / conf /.

w orkers.properties

01
02
03
04
05
06
07
08
09
10
11
12
13
# Define 1 real worker named ajp13
worker.list=ajp13
 
# Set properties for worker named ajp13 to use ajp13 protocol,
# and run on port 8009
worker.ajp13.type=ajp13
worker.ajp13.host=localhost
worker.ajp13.port=8009
worker.ajp13.lbfactor=50
worker.ajp13.cachesize=10
worker.ajp13.cache_timeout=600
worker.ajp13.socket_keepalive=1
worker.ajp13.socket_timeout=300

HTTP-сервер Apache подключится к Tomcat через порт 8009. Если вы видите файл server.xml в папке conf Tomcat, вы можете увидеть там следующее объявление коннектора.

1
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Установка и настройка mod_jk

Если вы загляните в папку httpd-2.2.22 / modules , вы увидите, что mod_jk.so установлен. Mod_jk — это соединитель для HTTP-сервера Apache для подключения к Apache Tomcat. Для настройки необходимо загрузить модуль mod_jk.so на HTTP-сервер Apache.

Отредактируйте файл /httpd-2.2.22/conf/httpd.conf следующим образом. Вам необходимо добавить эти свойства.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Load mod_jk module
# Update this path to match your modules location
LoadModule jk_module modules/mod_jk.so
 
# Where to find workers.properties
# Update this path to match your conf directory location
JkWorkersFile /home/semika/apache-tomcat-7.0.25/conf/workers.properties
 
# Where to put jk logs
# Update this path to match your logs directory location
JkLogFile /home/semika/apache-tomcat-7.0.25/logs/mod_jk.log
 
# Set the jk log level [debug/error/info]
JkLogLevel info
 
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
 
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
 
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
 
# Send everything for context /rainyDay to worker ajp13
JkMount /rainyDay ajp13
JkMount /rainyDay/* ajp13

Я думаю, что большинство свойств, определенных выше, для вас понятны. Что такое «JkMount» и «/ rainyDay». «RainyDay» — одно из моих приложений, развернутых на Apache Tomcat. В нем говорится: « Направьте все запросы к Apache Tomcat, которые идут с пространством имен / rainyDay» .

На этом мы закончили настройку mod_jk.

Теперь мы будем тестировать окружающую среду. Попробуйте следующие URL.

HTTP: // локальный: 8080 / rainyDay

Ничего особенного в приведенном выше URL. Поскольку я развернул свое приложение rainyDay на Apache Tomcat, мы можем получить доступ к приложению, даже не конфигурируя его с HTTP-сервером Apache, используя mod_jk.

Теперь попробуйте следующий URL.

HTTP: // локальный: 7000 / rainyDay

Если вы можете получить доступ к приложению с указанным выше URL, наша конфигурация прошла успешно. Мы знаем, что мы не развернули приложение ‘rainyDay’ на сервере Apache HTTP, но на Apache Tomcat, а также на сервере HTTP Apache, работающем на порту 7000. Мы по-прежнему можем получить доступ к приложению ‘rainyDay’, развернутому на Apache Tomcat, через сервер Apache HTTP ,

Теперь просто попробуйте следующий URL.

https: // локальный: 7000 / rainyDay

С помощью вышеуказанного URL вы не сможете получить доступ к приложению, так как URL имеет протокол https . Чтобы получить доступ к приложению с помощью https: // , нам нужно настроить SSL с HTTP-сервером Apache.

Конфигурирование mod_ssl.

Чтобы включить SSL на HTTP-сервере Apache, снова необходимо отредактировать файл httpd.conf . Откройте этот файл и найдите следующую строку.

1
2
3
# Secure (SSL/TLS) connections
 
#Include conf/extra/httpd-ssl.conf

Раскомментируйте вышеуказанную строку и откройте ее. Это находится в /httpd-2.2.22/conf/extra/httpd-ssl.conf . Ищите следующие свойства.

1
2
3
4
SSLPassPhraseDialog  builtin
SSLEngine on
SSLCertificateFile "/home/semika/httpd-2.2.22/conf/server.crt"
SSLCertificateKeyFile "/home/semika/httpd-2.2.22/conf/server.key"

Раскомментируйте, если некоторые из них уже закомментированы. Затем мы должны сгенерировать файлы сертификатов SSL, server.crt и server.key. Чтобы сгенерировать этот файл, выполните следующие команды.

1
2
3
4
cd /home/sermika/Downloads
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

При выполнении вышеперечисленных команд, он запросит некоторые детали, а также пароль, и вы должны предоставить их. Кроме того, вы должны помнить этот пароль, потому что его необходимо будет предоставить при запуске HTTP-сервера Apache.

Чтобы узнать больше о настройке SSL с HTTP-сервером Apache , обратитесь к этой документации. Теперь внимательно изучите папку / home / semika / Downloads. Вы можете увидеть сгенерированные server.key и server.crt . Вы должны скопировать эти два файла в каталог установки HTTP-сервера Apache.

1
2
3
cd /home/semika/Downloads
cp server.crt /home/semika/httpd-2.2.22/conf/server.crt
cp server.key /home/semika/httpd-2.2.22/conf/server.key

Снова откройте файл httpd-ssl.conf в /httpd-2.2.22/conf/extra . Вы можете видеть элемент </ VirtualHost>, и некоторые свойства определены в этом элементе. Как и в конфигурации mod_jk, здесь мы также должны объявить необходимые URL-адреса контекста приложения или любые другие URL-адреса, которые необходимо защитить с помощью SSL. Вы должны добавить объявление JkMount следующим образом.

1
2
3
4
5
6
</VirtualHost>
    ...........
    ...........
    JkMount /rainyDay ajp13
    JkMount /rainyDay/* ajp13
</VirtualHost>

Теперь попробуйте следующие URL

https: // локальный: 7000 /

Это должно загрузить страницу « Это работает ». Я использовал порт 7000, потому что я изменил порт HTTP-сервера Apache по умолчанию. Вы успешно настроили mod_ssl.

Теперь попробуйте следующий URL, а также.

https: // локальный: 7000 / rainyDay

Вы должны быть в состоянии загрузить приложение.

Тестирование среды.

Нет никакого порядка запуска Apache Tomcat и HTTP-сервера Apache. После запуска серверов вы можете протестировать свою конфигурацию с помощью следующих URL.

HTTP: // локальный: 8080 /
Если вы видите домашнюю страницу Tomcat, настройка Tomcat прошла успешно.

HTTP: // локальный: 8080 / rainyDay
Если вы можете получить доступ к приложению, ваше приложение успешно развернуто на Apache Tomcat.

HTTP: // локальный: 7000 /
Если вы видите страницу «Это работает», сервер Apache HTTP успешно настроен.

HTTP: // локальный: 7000 / rainyDay
Если он загружает ваше приложение, конфигурация mod_jk с HTTP-сервером Apache прошла успешно.

https: // локальный: 7000 /
Опять же, если вы видите страницу «Это работает», конфигурация mod_ssl с сервером Apache HTTP будет успешной.

https: // локальный: 7000 / rainyDay
Опять же, если вы можете получить доступ к приложению, конфигурация mod_ssl с HTTP-сервером Apache будет успешной, а HTTP-сервер Apache правильно обработает все безопасные запросы к приложению rainyDay.

Справка: Как настроить HTTP-сервер Apache с Tomcat по SSL? от нашего партнера JCG Семика локу калуге в блоге Code Box .