RTFM! статьи, советы, скрипты
::Заработок с помощью сайта ::JScript по-русски! ::Все русские мануалы::
МЕНЮ
О САЙТЕ
НОВОСТИ
СТАТЬИ
КНИГИ
АППЛЕТЫ
СВЯЗЬ

СЧЕТЧИКИ
Rambler's Top100
Рейтинг@Mail.ru
Яндекс цитирования

Приручаем дикого индейца: Apache

Автор: Данила Данилов Сайт: http://www.nestor.minsk.by/sr     Рейтинг: N/A из 7       <<НАЗАД
   
   
   В данной статье я хотел бы рассмотреть несколько вопросов по миниатюрной настройке Apache HTTP Server: будут рассмотрены вопросы по использованию наиболее популярных freeware продуктов: Apache, SSL и http-акселерации.
   
   Итак, приступим-с. Нередко можно встретить среднестатистический офисный сервер поставленный под Linux, на дохленькой 486 машине, которая выполняет все функции internet сервера и плюс ко всему сглаживает взаимодействие локальных пользователей с глобальной сетью и всеми предоставляемыми ею сервисами. А зачастую бывает так, что этот работяга выполняет функции веб-сервера. Все бы хорошо и отлично работает, скажете вы. Конечно же, но ведь у некоторых web-сервер обрабатывает не два запроса в день, а несколько десятков тысяч, как и было в моем случае. Мечтать о том, что начальство соизволит поменять машину, было делом совершенно бесполезным, тогда я решил поработать напильником в самом софте, что в принципе принесло свои плоды.
   Первое за что я взялся это за беднягу apache, которому приходилось "шуршать" по диску постоянно, то затем чтобы пропарсить shtml, то затем чтобы выполнить прихоти server-side приложений. Причем делать это при любом и каждом запросе пользователя. Раскрыв толстые умные книжки "Linux Encyclapedia" и "Linux Internet Server", открыв мануалы, я принялся за работу.
   
   
   http-акселерация
   
   
   
   Изначально Apache, как вы понимаете работает, как web-сервер, но с помощью нехитрых манипуляций его можно переключить в режим http-акселерации. Сама суть механизма сводиться к следующему: есть frontend-сервер, который отвечает на запросы пользователя и кэширует информацию и есть backend сервер, который занимается генерацией страниц.
   Прежде чем чего-то ровнять в вашем работающем софте надо проверить с какими модулями скомпилирован ваш apache, это делается просто:
   
   [root bin]#./httpd -l
   
   Compiled-in modules:
   
    http_core.c
   
    mod_charset.c
   
   ........
   
    mod_proxy.c
   
   ........
   и так далее. Он обязательно должен быть собран с модулем mod_proxy. Итак, есть какой-то хост lnx.open.by, веб-сервер установленный на котором будет подвергаться всяческим измывательствам и турбо-ускорениям;). Выбираем любой свободный порт для организации backend сервера и переводим существующий сервер на работу через этот порт. А делается это только для того, чтобы отключить генерацию логов, дабы не вводить в заблуждение анализаторы оных.
   Вот примерное описание вашего существующего сервера (я надеюсь он у вас простроен через vhost?). (IP адреса и имена хостов естественно вымышленные):
   
   <VirtualHost 192.168.0.1:80>
   
   ServerName lnx.open.by
   
   DocumentRoot /home/httpd/html/lnx-server
   
   ServerAdmin admin@lnx.open.by
   
   ErrorLog /var/log/httpd/lnx-server-errorlog
   
   CustomLog /var/log/httpd/lnx-server-accesslog combined
   
   </VirtualHost>
   Для построение backend, меняем на следующее:
   
   <VirtualHost 192.168.0.1:8081>
   
   ServerName lnx.open.by
   
   DocumentRoot /home/httpd/html/lnx-server
   
   ServerAdmin admin@lnx.open.by
   
   </VirtualHost>
   Теперь идем в httpd.conf для внесения и там некоторых правок:
   Listen 8081
   # тем самым мы разрешаем соединяться с 8081 портом и обрабатывать запросы приходящие на него.
   
   ProxyRequests On
   # включаем прокси
   
   ProxyVia On
   # разрешаем передавать сведения о том, от кого пришел запрос
   
   CacheRoot "/usr/local/apache/cache/"
   # тут у нас будет храниться сам кэш
   
   CacheSize 50000
   # размер кэша указываем в килобайтах
   
   CacheGcInterval 2
   #интервал в часах, по истечении которого будет проверяться лимит объема кэша и необходимость удаления старых страниц
   
   CacheMaxExpire 2
   # максимальное время, которое станицы могут лежать в кэше.
   
   NoConcurrentCacheUpdates On
   # разрешает обновление кэша различными программами.
   Этого должно хватить по идее. Если вас интерисует более подробная информация о модуле mod_proxy, то обращайтесь за ней по адресу:
   http://www.apache.org/docs/mod/mod_proxy.html
   
   Теперь займемся "рисованием" frontend сервера.
   
   <VirtualHost 192.168.0.1:80>
   
   ServerName lnx.open.by
   
   ProxyPass / http://192.168.0.1:8081/
   
   ProxyPassReverse / http://192.168.0.1:8081/
   
   CacheRoot "/usr/local/apache/cache/"
   
   ErrorLog /var/log/httpd/lnx-server-errorlog
   
   CustomLog /var/log/httpd/lnx-server-accesslog combined
   
   NoCache chat
   
   </VirtualHost>
   Теперь создаем каталок /usr/local/ apache/cache/ с полными правами для пользователя от имени которого запускается Apache сервер, обычно это nobody.
   
   [root bin]# mkdir /usr/local/apache/cache
   
   [root bin]# chown nobody.nobody /usr/local.apache/cache
   Прошу заметить, что кэш можно создавать в любом месте файловой системы.
   Собственно, строчки начинающиеся с Proxy и говорят акселератору оброщаться за исходными страницами расположенный на 8081 порту. Еще одно маленькое замечание: никто вам не запрещает вместо строки:
   
   ProxyPass / http://192.168.0.1:8081/
   Написать что-нибудь такое:
   
   ProxyPass /info http://info.lnx.open.by:8081/
   И при обращении пользователя к http://lnx.open.by/info он получит данные с http://info.lnx.open.by. Это иногда бывает полезным при объеденении нескольких серверов в один.
   Команда NoCache указывает на те слова в URL, при встрече которых, информация не будет кэшироваться на диске. Такое может понадобиться для быстрообновляющихся страниц, которые не оказывают большой нагрузки на сервер.
   Вот собственно и все, при условии, что настроено все у вас правильно. И после перезапуска сервера, все запросы будут прокэшированы. Проверить это очень легко.
   
   [root@lnx home]# cd /usr/local/apache/cache
   
   [root@lnx cache]# ls
   
   2 8 E H J M O R U W _ c i v
   
   3 B G I L N P T V Z b h j z
   
   [root@lnx cache]#
   А теперь типизированно расмотрим, как же все таки работает эта связка. На 80-й порт по адресу 192.168.0.1 приходит запрос. Apache разбирает его и смотрит, для какого виртуального сервера он предназначен. Если для lnx.open.by, прокси разбирает запрос и смотрит в кэше, не делал ли кто такой запрос раньше. Если делали и время "протухания" страницы еще не подошло, то просто отдаем закэшированную страницу и вес. Если не делали или страница протухла", до делает запрос к backend-серверу на 8081-й порт и кэширует заново выданную страницу. Все очень просто и надежно.
   
   
   SSL для Apache HTTP Server
   
   
   
   Итак, теперь ваш "индеец" немерянно быстр и неплохо бы ему быть нактолько же защищеным и уметь защищать других. (Это так — алигория;) Попробуем прикрутить к нему SSL.
   Сначала нам необходим сам Apache. Если у вас уже есть собранное и работающее дерево apache, то скопируйте его в безопасное место. Если нет, то вытяните самую последнюю версию Apache и разверните его.
   Будем рассматривать настройку на базе следующих пакетов:
   ftp://ftp.modssl.org/source/mod_ssl-2.6.4-1.3.12.tar.gz
   ftp://ftp.openssl.org/source/openssl-0.9.5a.tar.gz
   и непосредственно самого Apache 1.3.12.
   Делаем со всем этим следующее, тем самым распаковываем архивы:
   
   [root@lnx tmp]# gzip -d -c mod_ssl-2.6.4-1.3.12.tar.gz | tar xvf -
   
   [root@lnx tmp]# gzip -d -c openssl-0.9.5a.tar.gz | tar xvf -
   Идем дальше:
   
   [root@lnx tmp]# cd openssl-0.9.5a
   
   [root@lnx openssl-0.9.5a]#./config
   
   [root@lnx openssl-0.9.5a]# make
   Отконфигурировали и собрали openssl, пакет, который и будет обеспечивать шифрование. Я рекомендую дать еще команду make install, после которой в /usr/local/ssl будет лежать это пакет.
   Далее...
   
   [root@lnx openssl-0.9.5a]# cd..
   
   [root@lnx tmp]# cd mod_ssl-2.6.4-1.3.12
   
   [root@lnx mod_ssl-2.6.4-1.3.12]#./configure -with-apache=../apache_1.3.12
    -with-ssl=../openssl-0.9.5a -prefix=/usr/local/apache)
   Этими командами вы включили модуль mod_ssl в число собираемых модулей для Apache. (в нашем случае Apache находиться в директории: tmp/apache_1.3.12)
   Теперь просто перейдите в каталог с Apache и скажите make — все необходимые модули будут собраны. Так же, если у вас раньше были собраны нестандартные модули, как у меня, они никуда не исчезнут и будут тоже вкомпилированы.
   Далее....
   make certificate
   На всяческие вопросы можно особо усердно могз не напрягать, а вводить любые пароли или просто давить Enter, тем самым вы сгенерируете свои сертефикаты.
   make install
   Этой командой вы инсталлируете Apache в предназначенное для него место (/usr/local/apache).
   Все, можете попробовать запустить apache командой
   /usr/local/apache/bin/apachectl startssl
   Если все запустилось, а проверить можно так:
   ps ax|grep ht
   в ответ должно появиться появляются httpd -DSSL, то можете себя поздравить — оно собралось.
   Теперь надо чуть-чуть подпилисть наш apache.
   Итак, начнем конфигурировать, открываем в редакторе файл httpd.conf.
   Listen 443
   NameVirtualHost 192.168.0.1:443
   Эти команды указывают Apache слушать 443 порт (стандартный порт для secure http (https)) и обслуживать на нем виртуальные серверы.
   Теперь добавляем описание виртуального сервера.
   
   <VirtualHost 192.168.0.1:443>
   
   SSLEngine on
   
   SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
   
   SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
   
   SSLLog /usr/local/apache/logs/ssl_engine_log
   
   SSLLogLevel warn
   
   SSLOptions +StdEnvVars
   Тут добовляем стандартные для этого места директивы;)
   </VirtualHost>
   
   Теперь надо перезапустить сервер, в первый раз после перезапуска он у вас должен спросить парольную фразу. Но следует обратить внимание, что это происходит лишь однажды и такое не приемлимо для уже рабочего https-сервера. Теперь делаем следуещее:
   Входим в каталог с ssl.key
   cp server.key server.key.org
   openssl rsa -in server.key.org -out server.key
   Вводим пароль для дешифровки
   chmod 400 server.key
   И закрываем файл с отрытым ключом от посторонних глаз, все сервер больше не будет спрашивать пароль. На данном этапе уже должен работать SSL на полную катушку. То есть, набирая https://ваш.хост.ltd вы должны получать запрос браузера на использование этого сертификата.
   Для того, чтобы немножко автоматизировать процесс запуска Apache вместе с SSL подредактируем bin/apachectl. Исправим в нем условие start на startold, а startssl на просто start. Затем скопируем его в /etc/rc.d/ init.d/httpd. Теперь по умолчанию при загрузке сервера, будет запускаться Apache с поддержкой SSL.
   Чтобы не мучаться с PATH, сделаем, чтобы openssl запускался нормально.
   cd /usr/local/bin
   ln -s /usr/local/ssl/bin/openssl openssl
   Итак, теперь будем генерировать нормальные сертификаты.
   Генерируем ключ.
   openssl genrsa -des3 -out server.key 1024
   На данном этапе мы создали server.key, теперь генерируем запрос в службу верификации.
   openssl req -new -key server.key -out server.csr
   Будьте аккуратны в ответах, ведь это потом увидят все. Если ошиблись, все можн повторить заново. CommonName — это адрес хоста без http://.
   Все, если вы получили следующую надпись, то запрос сгенерирован правильно:
   You now have to send this Certificate Signing Request (CSR)
   to a Certifying Authority (CA) for signing
   Но мы не буржуи, подписывать у нас некому, поэтому мы будет сами подписывать себя. Хотя если у вас есть деньги и вам необходимо подписать свой сертификат именно у глобальных авторизационных центров, то на modssl.org Вы найдете все необходимые адреса и ссылки.
   openssl genrsa -des3 -out ca.key 1024
   openssl req -new -x509 -days 365 -key ca.key -out ca.crt
   Генерируем подпись авторизационного центра на год (можно и на больше), процедура полность схожа с генерацией ключа.
   Копируем sign.sh из pkg.contrib из пакета mod_ssl в каталог с ключами
   И подписываем свой же запрос
   ./sign.sh server.csr
   Получив надпись, содержащую
   Now you have two files: server.key and server.crt. These now can be used as following
   Начинаем радоваться, все собрано так, как надо. Копируем server.key и server.crt на место старых, но в каталоге c crt файлом Makefile не трогаем. Скопировав новый.crt файл, наберите make в этом же каталоге — он создаст некий хеш файл.
   Все, теперь перезапустите Apache и можете наслаждаться тем, что вы сделали собственный WWW сервер, защищенный с помощью SSL.
   Проверить защищенность вы можете посмотрев информацию о сертификатах или соединении в info-окнах браузеров. Если вы им не доверяете, то дайте команду
   openssl s_client -connect localhost:443 -state -debug
   Она выведет полностью всю информацию, которую она сможет выжать из вашего SSL сервера.
   
   


<<НАЗАД      ОЦЕНИТЬ СТАТЬЮ    ВЕРСИЯ ДЛЯ ПЕЧАТИ>>
Статья прочитана :  раз.




пейкюлю



 
 
 
 
 
pauk ©® 2000-2015. All rights reserved.
При перепечатке ссылка на сайт и указание обязательны.
Мнение администрации сайта не всегда совпадает с мнением автора.
Орфография и пунктуация - авторские.
Администрация не несет никакой ответственности за использование материалов.
.
Protected by Copyscape DMCA Takedown Notice Infringement Search Tool