Лекция 10

Конфигуриране на системата. Стартиране и конфигурация на Apache Web сървър.


Apache Web Server е най-често използвания Web сървър в Интернет. Според Netcraft той се използва в над 60% от Интернет сайтовете. Причината за неговата популярност е че той е безплатен и много стабилен. Друго голямо предимство на Apache, че той е с отворен код, което позволява лесно модифициране на кода или писане на допълнителни модули. Apache поддържа следните основни функции:

Сигурност

Apache притежава набор от защити, които го правят труден за осъществяване на атаки. Този набор включва идентификационни механизми и Secure Socket Layer (SSL). Тъй като Apache поддържа широк списък от сървъри за бази данни като MySQL и Oracle, то те може да се използват за съхраняване на потребителите имащи достъп до Web сървъра.

Можете да добавите поддръжка на SSL на сървъра чрез модула mod_ssl. SSL използва цифрови подписи за криптиране на данните пренасяни през Интернет.

Поддръжка на HTTP/1.1

Apache поддържа най-новата спецификация на HTTP протокола, а именно 1.1. Това означава, че Apache поддържа виртуални хостове, постоянни връзки (persistent connection), кеширане на ресурсите, качване на файлове от страна на клиента и др.

Поддръжка на множество езици

Apache поддържа множество езици за създаване на Web съдържание. Езиците които той поддържа са: PHP (Hypertext Preprocessor), ASP (Active Server Pages), JSP (Java Server Pages), Perl, CGI (Common Gateway Interface), SSI (Server Side Includes) и много други.

Кеширане на информацията

Чрез модула mod_proxy, Apache може да кешира страниците, като при повторно заявяване тя се зарежда не от Интернет, а от локалния кеш. Това може да спести трафик и време за зареждане.

Dynamic Shared Objects

Apache поддържа механизъм за зареждане на модули, които добавят различна функционалност на Web сървъра. Това става без прекомпилиране на Web сървъра.

Поддръжка на Windows

Версия 1.x.x на Apache може да работи успешно и на Windows базирани машини. Тази версия обаче не е оптимизирана за работа под Windows и не трябва да се използва за реални Web сървъри. След версия 2.x Apache вече може да работи и като реален сървър на Windows базирани машини.

Скаларност

Можете да конфигурирате Apache така, че множество сайтове да работят на един сървър. Това става чрез задаване на виртуални хостове.

След като разбрахме защо Apache е предпочитан Web сървър е време да разберем основите на неговата конфигурация.

Преди да започнем с конфигурацията трябва да проверите дали имате инсталиран Apache. Това може да стане със следната команда:

#whereis apachectl

apachectl: /usr/sbin/apachectl /usr/man/man8/apachectl.8.gz /usr/share/man/man8/apachectl.8.gz

Ако Вие имате изход подобен на този, то Apache е инсталиран на вашата система. В противен случай трябва да инсталирате Apache. Това може да стане както от бинарните пакети на вашата дистрибуция или от изходен код. В повечето случаи пакета е компилиран с повечето полезни опции и компилирането от изходен код е безсмислено. Ако все пак желаете да компилирате, то кода може да се свали от http://www.apache.org/dist/httpd/.

След като свалите кода трябва да го декомпресирате:

#tar zxvf apache_1.3.24.tar.gz

След това трябва да добавите група и потребител за работата на Apache:

#groupadd www

#useradd -g www www

След това чрез passwd -l трябва да заключите потребителя www, така че само root да има достъп до него.

След това трябва да се стартира скрипта ./configure , който да създаде файловете необходими за компилиране не сървъра. Този скрипт има множество полезни опции които може да се видят чрез:

#./configure --help

Ето и примерна конфигурация (възможно най-елементарна):

#./configure --prefix=/usr/local/apache --server-uid=www --server-gid=www \

>--htdocsdir=/home/www/htdocs \

>--cgidir=/home/www/cgi-bin \

>--enable-module=most \

>--enable-shared=max

След това трябва последователно да се изпълнят командите:

#make

#make install

След като е инсталиран, може да контролирате Apache с командата apachectl. Тя има следните опции:

Сега е време за кратък преглед на основните конфигурационни директиви. Те се намират във файла /etc/apache/httpd.conf (в зависимост от това как е компилиран файла може да се намира и в друга директория). Той е разделен на няколко секции. Първата от тях е Global Environment. Директивите в тази секция са глобални и се отнасят за целия Web сървър и различните виртуални хостове. Тя включва следните основни директиви:

Това са по-важните директиви в Global Environment секцията. Следващата секция, която ще разгледаме е Main Server Configuration. Тази секция се отнася за основния Web сървър. Отделните виртуални хостове може да имат конфигурация различна от тази, ако дадена директива не е зададена изрично в конфигурацията на виртуалния хост, то се използва стойността й зададена тук. Main Server Configuration секцията съдържа следните по-важни директиви:



<Directory /home/www/htdocs>

Options Indexes FollowSymLinks

DirectoryIndex index.php index.html index.htm

AllowOverride All

Order allow,deny

Allow from all

</Directory>


Значението на различните поддирективи е следното:

Понякога се налага да се асоциира дадено разширение на файла към определен MIME тип. Например, за да знае сървъра какво да прави с PHP файловете (освен зареждането на модулите) е необходимо файловете с разширение .php да се асоциират към MIME типа application/x-httpd-php. Това може да стане с директивата AddType:

AddType application/x-httpd-php .php

Ето и обяснение на други директиви в :


Третата секция в httpd.conf е Virtual Hosts. Чрез правилното конфигуриране на тази секция Вие ще можете да пуснете няколко Web сайта, които се хостват на един единствен Web сървър. Тези сайтове може да бъдат част от основния домейн или да не бъдат. Всеки отделен виртуален хост трябва да се поставя в своя собствена <VirtualHost></VirtualHost> секция. Вътре в нея се дефинират отделните директиви специфични за дадения виртуален хост. Виртуалните хостове могат да бъдат два типа IP базирани (IP-Based) и Именно базирани (Name-Based). Разликата между тях е, че при първия тип е необходимо за всеки виртуален сървър да се конфигурира отделен IP адрес. За разлика от него, при втория тип можете да конфигурирате множество виртуални сървъри на един единствен IP адрес. Важно е да се знае, че втория тип виртуални хостове не могат да работят в версия на HTTP по-ниска от 1.1.

Ето примерна конфигурация на IP-Based виртуален хост:

<VirtualHost 172.17.68.222>

ServerName steve.ulala.com

DocumentRoot /home/www/public_html/steve

</VirtualHost>

<VirtualHost 172.17.68.223>

ServerName pola.ulala.com

DocumentRoot /home/www/public_html/pola

</VirtualHost>

За да работи това е необходимо да конфигурирате вашия мрежови интерфейс да има повече от едно IP едновременно. Това може да стане така:

#ifconfig eth0:0 172.17.68.222

#ifconfig eth0:1 172.17.68.223

Разбира се, трябва да имате и валидни записи в DNS сървърите които да свързват steve.ulala.com и pola.ulala.com с 172.17.68.222 и 172.17.68.223. Това най-лесно може да стана като добавите следните редове в /etc/hosts:

172.17.68.222 steve.ulala.com

172.17.68.223 pola.ulala.com

Конфигурацията на Name-Based виртуални хостове е подобна. Преди секциите с отделните виртуални хостове, трябва да промените директивата:

NameVirtualHost 172.17.68.220

<VirtualHost 172.17.68.220>

ServerName steve.ulala.com

DocumentRoot /home/www/public_html/steve

</VirtualHost>

<VirtualHost 172.17.68.220>

ServerName pola.ulala.com

DocumentRoot /home/www/public_html/pola

</VirtualHost>

Съществена разлика има в редовете добавени в /etc/hosts:

172.17.68.220 steve.ulala.com

172.17.68.220 pola.ulala.com

В самите секции на различните виртуални хостове, може да слагате различни директиви, които имат по-висок приоритет от тези в секцията описваща основната конфигурация.

Apache поддържа и т.нар. Dynamic Virtual Hosting. Това позволява на администратора създаде специфични темплейти за DocumentRoot и ScriptAlias . На тази база и на базата на клиента, Web сървъра създава сам необходимите директории и връзки. Това е подходящо да се използва в сайтове поддържащи множество виртуални хостове, чието администриране на ръка би било трудоемка задача. Dynamic Virtual Hosting може да направите както с IP-Based виртуални хостове, така и с Name-Based такива.

Повечето Web сървъри се използват за съдаване на динамично съдържание, чрез определени програмни езици. Най-старата технология за създаване на динамично съдържание е използването на CGI. Чрез CGI можете да напишете програма на който език пожелаете и да визуализирате резултата на Web браузъра. За да направите това, трябва да са спазени някои изкисвания, които ще бъдат разгледани по долу. Като първо, трябва да имате директория в която е позволено изпълнението на CGI скриптове. Ето пример за такава директория:

<Directory /home/www/cgi-bin>

Options +ExecCGI

</Directory>

След това трябва да присвоите дадени разширения към CGI съдържанието:

AddHandler cgi-script cgi pl

След това трябва да напишете програма, чийто изход е форматиран по определен начин:


Ето и пример за такава програма писана на езика Perl:

#!/usr/bin/perl

#mycgitest.cgi

print „Content-type: text/html\n\n“;

print „<html><head></head><body>First CGI program</body>“;

За да се изпълни този файл трябва да са спазени следните условия:

Накрая ще поговорим малко за сигурността на сървъра. На първо място е да укажете на сървъра да работи с права различни от тези на root потребителя. Това може да стане чрез директивите User и Group. След това трябва внимателно да обмислите кои директории може да показват соите файлове при липса на index.html. Може да забраните показването като премахнете от директивата Options опцията Indexes. Винаги проверявайте CGI скриптовете които пишете за грешки и/или пропуски, тъй като CGI скриптовете са едни от най-големите дупки в сигурността на Web сървъра. За да намалите вероятността от проблеми с CGI трябва да използвате обща директория зададена чрез директивата ScriptAlias. Позволяването да се стартират CGI скриптове от всички директории е много лоша идея.

Други проблеми носят SSI (Server Side Includes):

Чрез файловете .htaccess можете да задавате различни права и достъп за всяка директория. Ако вашия сървър използва AllowOverride All, то потребителя може да запише в своята директория файл с такова име, който да компрометира сигурността на сървъра.

Стартирането на някои услуги на машина с работещ Web сървър може да даде повече права отколкото сте желали. Пример за това е използването на SAMBA сървър на машина с работещ Web сървър, туй като в определени случаи можете да предоставите достъп на целия свят до ресурсите на вътрешната мрежа. Стартирането на telnet и други подобни услуги не само ще намали сигурността на вашия Web сървър, но и на цялата машина като цяло. По принцип спазването на девиза „колкото по-малко, толкова по-добре“ е желателно когато говорим за стартирани услуги.


6