Показаны сообщения с ярлыком apache. Показать все сообщения
Показаны сообщения с ярлыком apache. Показать все сообщения

пятница, 15 июля 2011 г.

apache mod_wl mod_ssl

В блогах стало появляться много постов об обеспечении безопасности серверов Weblogic. Напишу и я что-нибудь.
Задача - обеспечение шифрование трафика между пользователем находящимся за пределами внутренней сети и приложением. Сервера приложений находятся за балансировщиком нагрузки, реализованном на Apache 2.2. Шифроваться будет только трафик между Apache и конечным пользователем.

Для начала можно организовать вот такую структуру


1. Получение SSL сертификата
Сертификат можно купить или сгенерировать самоподписанный.
Для экспериментов можно сгенерировать с помощью пакета openssl.
openssl req -new -x509 -nodes -out server.crt -keyout server.key

После ответа на несколько вопросов получаем 2 файла.
server.key - ключ для сервера.
server.crt - сертификат, в котором хранится открытый ключ и информация о владельце сертификата. Сертификаты сразу можно разложить в те места, где их сможет найти Apache.
/etc/apache2/ssl.crt/server.crt
/etc/apache2/ssl.key/server.key
2. Настройка Apache
Я использую SUSE Linux 11. Для других дистрибутивов расположение файлов будет отличаться.
  • Необходимо скопировать файл  mod_wl_22.so в директорию с модулями.
/usr/lib64/apache2-prefork
  • Подгружаем mod_wl_22
echo 'LoadModule weblogic_module /usr/lib64/apache2-prefork/mod_wl_22.so' >> /etc/apache2/loadmodule.conf
  • Включаем поддержку SSL в файле /etc/sysconfig/apache2

APACHE_SERVER_FLAGS="SSL"
  • Конфиг для виртуального хоста. Добавляем к файлу /etc/apache2/vhosts.d/vhost.conf
<IfDefine SSL>
<IfDefine !NOSSL>
<VirtualHost *:443>
ServerName LoadBalancer.ru
RewriteEngine On
<Location /myApp>
SetHandler weblogic-handler WebLogicCluster srv1.ru:8001,srv2.ru:8002
</Location>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/server.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
</VirtualHost>
</IfDefine>
</IfDefine>
  • Можно рестартовать апач. Готово.
/etc/init.d/apache2 restart

среда, 20 апреля 2011 г.

Балансировка нагрузки с помощью mod_wl


Балансировка нагрузки возможна не только между серверами, объединёнными в кластер. С некоторыми ограничениями, можно сделать это с помощью любого балансировщика нагрузки, в том числе и с помощью apache + mod_wl просто перенаправляя запросы на разные сервера, на которые задеплоено одно приложение. Естественно, фича session failover при этом не доступна.

В моём случае необходимо было реализовать возможность перезагрузки экземпляров weblogic (по очереди) без потери доступности сервиса. При этом потеря сессии и её состояния не считается критичной.
Будем реализовывать вот такую схему:



Если почитать документацию, можно найти нужный параметр
WebLogicCluster
под которым подразумевается
List of WebLogic Servers that can be used for load balancing
Это список  серверов, доступных для перенаправления на них запросов. Список динамически обновляется, учитывая failed и recvered в данный момент сервера.
При этом не стоит переопределять параметр
DynamicServerList
он по имелчанию равен ON. При установке его в Off возможно перенаправление запроса на неработающий в данный момент сервер.

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

LoadModule weblogic_module "/etc/apache2/modules/mod_wl_22.so"

<IfModule mod_weblogic.c>
       WebLogicCluster server1:8001,server1:8002,server2:8001,server2:8002
     MatchExpression *.jsp №перенаправлять только jsp-страницы
</IfModule>
Или, например, так

<Location /myApp>
    SetHandler weblogic-handler
    PathTrim /myApp    WebLogicCluster server1:8001,server1:8002,server2:8001,server2:8002
</Location>
Парвый вариант перенапрвляет запрс на основе MIME-типа. Второй по явному указанию пути (path) или его части

суббота, 9 апреля 2011 г.

Запуск weblogic на 80 порту upd 16.01.12

В Unix-like системах запуск приложений, слушаюших на портах меньших 1024 возможен только от пользователя root.  Соответственно, запуск weblogic на 80 порту от  имени другого пользователя невозможен.  Пара способов обойти это ограничние.
1.       Запуск процесса от имени root с последующим переключением его на непривилигированнойго пользователя. Настройка Weblogic-сервера производится через admin-консоль на вкладке
     Environment - > Machines -> [Mashine name]
Post-Bind UID: – UID  группы, на пользователя которой мы переключаемся.
Post-Bind GID: – GID пользователя, на которого переключаемся
2.       Второй способ – запуск прокси-сервера на 80 порту и перенаправление на weblogic всех запросов, адресованных приложению.
В качестве прокси будем использовать apache 2.2 с модулем mod_wl
Для SuSE linux и утановленного из репозиториев apache это будет выглядеть так
1.       Установка web-сервера
rpm –ihv apache2*
2.       Создаём папку /etc/apache2/modules и копируем  в неё mod_wl_22.so
3.       В папке  /etc/apache2/conf.d создаём конфиг примерно такого содержания:
LoadModule weblogic_module "/etc/apache2/modules/mod_wl_22.so" 
<Location /console>
    SetHandler weblogic-handler
    WebLogicHost server
    WeblogicPort 7001
</Location>
           KeepAliveEnabled ON           KeepAliveSecs      30
                 
запросы к приложению console на 80 порту теперь перенаправляются на 7001 порт



4. Перезапускаем apache
                               rcapache2 reload
                Проверяем работоспособность

Третий способ.
Завернуть трафик с порта управляемого сервера на порт 80.
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 

iptables -t nat -A PREROUTING -p udp -m udp --dport 80 -j REDIRECT --to-ports 8080