Задача: Внешние клиенты должны получать доступ к https://server1.mydomain.com, https://server2.mydomain.com, https://server3.mydomain.com, https://......
Решение: Для проксирования был выбран сервер Apache2 установленный на отдельном Linux хосте локальной сети. OS была выбрана Ubuntu 12.4.1 TLS server 64-bit установленная в Sphera, хотя это и не важно. Задачу может выполнить любой 1Hz Celeron с 512Mb на борту и статическим локальным IP адресом.
Далее статья написана выдержками из различных источников надерганых мною в процессе выполнения задачи и чтения логов с ошибками. Опущен процесс установки Ubuntu как тривиальный. Шаги описаны с момента чистой, обновленной из стандартных сорцов OS Ubuntu. То, что нужно делать copy/paste в командную строку Ubuntu выделено курсивом и жирным стилем. Поехали...
Все последующие команды выполняем с правами root
sudo su
вводим пароль пользователя указанного при установки Ubuntu
1. Ставим OpenSSH
Если Вы не установили OpenSSH сервер во время установки системы, Вы можете сделать это сейчас:
apt-get install ssh openssh-server
С этого момента Вы можете использовать SSH клиента, такого как PuTTY и связаться с вашим сервером на Ubuntu server 12.04 LTS и выполните остальные шаги из этой статьи.
2. Настраиваем сеть
Если при установки Ubuntu вы настроили систему на получение настроек сети через DHCP, то сейчас мы должны изменить это, что бы сервер имел статический IP-адрес. Отредактируем /etc/network/interfaces и настроим его под свои нужды (в данном примере установки я буду использовать IP-адрес 192.168.0.100) и DNS сервера 8.8.8.8 и 8.8.4.4 - начиная с Ubuntu 12.04, больше Вы не можете редактировать /etc/resolv.conf, но нужно указать ваши сервера имен в вашей сети - (см.для более подробной информации man resolvconf ).
Мы же водим:
nano /etc/network/interfaces
И редактируем файл:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4
Затем перезагрузим сеть:
/etc/init.d/networking restart
Затем отредактируйте /etc/hosts.
nano /etc/hosts
Сделаем что бы файл выглядел следующим образом:
127.0.0.1 localhost.localdomain localhost
192.168.0.100 proxy.mydomain.com proxy
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Теперь запустите:
echo proxy.mydomen.com > /etc/hostname
/etc/init.d/hostname restart
или
/etc/init.d/hostname.sh
И запустите:
hostname
hostname -f
Теперь они должны показать proxy.mydomain.com.
3. Синхронизация системного времени
Это хорошая идея, чтобы синхронизировать системные часы с NTP Network TIME рrotocol) сервером через Интернет. Просто запустите:
apt-get install ntp ntpdate
... и системное время всегда будут синхронизировано.
4. Обновляем систему
Запустите:
apt-get update
... и для обновления базы данных APT пакетов:
apt-get upgrade
Для установки последних обновлений (если имеются таковые). Если Вы видите, что новое ядро получило обновлений как часть установленого, Вы должны перезагрузить систему:
reboot
5. Установка и настройка сервера Apache как прокси сервера SSL
Вводим команду:
apt-get install apache2
Если Вы выполняли установку Apache2 на локальной машине, то зайдя в броузере по адресу http://localhost вы увидите надпись: It works!
Так же сервер должен быть доступен в сети по адресу http://192.168.0.100 с тем же результатом.
Мы планируем использовать несколько хостов по 443 порту, поэтому есть такой нюанс: в файл /etc/apache2/apache2.conf надо добавить такую строку (например, в самый конец):
nano /etc/apache2/apache2.conf
.............
NameVirtualHost *:443
Иначе можете встретить такую примерно ругань от Apache: [warn] _default_ VirtualHost overlap on port 443, the first has precedence
На этом установка завершена. Поговорим о настройках.
По умолчанию в Ubuntu 12 файлы apache2 находятся в /etc/apache2. Из всех файлов нам интересны файлы содержащие настройки виртуальных хостов. Они лежат в /etc/apache2/sites-available/. По умолчанию мы видим здесь два файла — default и default-ssl. Первый для доступа к сайту через стандартный порт 80 и второй для доступа к сайту по SSL протоколу через порт 443. Нас интересует второй конфигурационный файл. Копируем его в файл с именем нашего первого хоста для проксирования:
cd /etc/apache2/sites-available/
cp default-ssl server1.mydomain.com
Далее мы будем работать с файлом server1.mydomain.com
В Ubuntu манипулирование апачем происходит с помощью глобальных команд: включение/выключение виртуал хостов - a2ensite / a2dissite с одним аргументом - пути к конфигу, в котором прописан виртуал хост. Включение/выключение модов или расширений происводится командами a2enmod / a2dismod.
Далее алгоритм работы такой:
1) Нужно включить необходимые модули апача. Устанавливаем:
sudo apt-get install libapache2-mod-proxy-html libapache2-mod-gnutls
2) Кладем имеющиеся сертификаты для дальнейшего использования и выставляем права. Также переназначаем корневой каталог для сайна на 80 порту для удобства:
mkdir /var/www/ssl
Кладем в папку /var/www/ssl наш сертификат и ключ.
Меняем права:
chmod 700 /var/www/ssl
сhmod 600 /var/www/ssl/server1.crt
chmod 600 /var/www/ssl/server1.key
Изменяем директорию для http дефолтого сайта (не обязательно, но желательно):
mkdir /var/www/www
cp /var/www/www/index.html /var/www/www/index.html
cd /etc/apache2/sites-available/
nano default
Меняем строку на
.....
DocumentRoot /var/www/www
Перечитываем конфиг:
a2ensite default
3) Переписываем конфиг виртуал хоста (по 1му файлу на 1 хост!) в /etc/apache2/sites-available/
Проверяем где мы:
cd /etc/apache2/sites-available/
nano server1.mydomain.com
Видим много всего. Если пониманте что делать - можете редактировать файл, если нет
- удаляйте все командами nano и вставляйте текст из примера:
---------------------------------------------------------------------------------------------------
DocumentRoot /var/www/www
ServerName proxy.mydomain.com
ServerAlias server1.mydomain.com
ServerAdmin This email address is being protected from spambots. You need JavaScript enabled to view it.
ErrorLog ${APACHE_LOG_DIR}/server1-ssl-error.log
LogLevel warn
TransferLog ${APACHE_LOG_DIR}/server1-ssl-transfer.log
CustomLog ${APACHE_LOG_DIR}/server1-ssl-access.log combined
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /var/www/ssl/mydomain.com.crt
SSLCertificateKeyFile /var/www/ssl/mydomain.com.key
SSLProxyEngine on
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / https://server1.mydomain.com
-----------------------------------------------------------------------------------------
Затем командой
a2ensite server1.mydomain.com
активируем наш виртуал хост. После этого нужно перечитать Apache конфиги:
/etc/init.d/apache2 reload
Разрешаем:
a2enmod proxy && a2enmod ssl && a2enmod cache && a2enmod proxy_connect && a2enmod proxy_html && a2enmod rewrite && a2enmod cache && a2enmod disk_cache
Перезапускаем Apache:
sudo /etc/init.d/apache2 restart
Усё, будет проксировать на server1.mydomain.com
Для проксирования на другие хосты server2.mydomain.com, server3.mydomain.com и т.д. создаем для них новые файлы в /etc/apache2/sites-available/ с именами server2.mydomain.com, server3.mydomain.com и редактируем их в части названия доменов. Сертификат можно использовать один для всех доменов зоны mydomain.com.
Если будут замечания - пишите комментарии, я поправлю.