Начало > Помощен център > Cloud сървъри > Администрация на сървър > CentOS 7 – инсталиране на Apache уеб сървър

CentOS 7 – инсталиране на Apache уеб сървър

Помощен център

CentOS 7 – инсталиране на Apache уеб сървър

Apache е най-използваният HTTP сървър в света. Apache е софтуер с отворен код, който се предлага безплатно. Той е бърз, надежден и сигурен, функциите му може да бъдат персонализирани в широки граници чрез използване на разширения и модули.

httpd е сървърната програма на Apache HyperText Transfer Protocol (HTTP), която е проектирана да се изпълнява като самостоятелен процес (daemon).

В статията ще ви покажем как да инсталирате Apache уеб сървър с виртуални потребители на CentOS 7 сървър.

За да изпълните стъпките в статията ще се нуждаете от:

  • Инсталиран CentOS 7 сървър (в примера: centos-7-x86_64-minimal-1810);
  • Потребител с root привилегии (sudo);
  • Защитна стена (firewalld);

Инсталиране на Apache

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

Първо актуализираме локалния индекс на хранилището като в случая го правим само за httpd пакетите:

sudo yum update httpd

След като пакетите се актуализират, инсталираме httpd:

sudo yum install httpd

След потвърждаване на инсталацията Install 1 Package (+4 Dependent packages), yum инсталира httpd:

Installed: 
httpd.x86_64 0:2.4.6-89.el7.centos.1

и всички необходими зависимости:

Dependency Installed:
apr.x86_64 0:1.4.8-3.el7_4.1  apr-util.x86_64 0:1.5.2-6.el7  httpd-tools.x86_64 0:2.4.6-89.el7.centos.1  mailcap.noarch 0:2.1.41-2.el7
Complete!

Вече може да стартираме httpd.

Стартиране на httpd

Apache (httpd) не стартира автоматично в CentOS 7 след завършване на инсталацията, затова старитраме httpd процеса с командата:

sudo systemctl start httpd

и проверяваме статуса с:

sudo systemctl status httpd

Зарежда се подробна информация за работещата вече услуга - активен статус, PID, дъщерни (child) процеси:

[commonuser@centos7 ~]$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-08-04 09:59:20 EEST; 1min 26s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1608 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─1608 /usr/sbin/httpd -DFOREGROUND
           ├─1609 /usr/sbin/httpd -DFOREGROUND
           ├─1610 /usr/sbin/httpd -DFOREGROUND
           ├─1611 /usr/sbin/httpd -DFOREGROUND
           ├─1612 /usr/sbin/httpd -DFOREGROUND
           └─1613 /usr/sbin/httpd -DFOREGROUND
...
Aug 04 09:59:20 centos7 systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
[commonuser@centos7 ~]$

Горната информация показва, че услугата е стартирала успешно. Най-доброто доказателство обаче е да видим в браузъра тестовата страница на Apache. Може да получите достъп до стандартната страница на Apache, за да потвърдите, че софтуерът работи правилно чрез вашия IP адрес:

Успешно зареждане тестовата страница на Apache

Ако не знаете IP адресът на вашия сървър, можете да го получите по няколко различни начина през командния ред. Въведете в командния ред на вашия сървър следното:

hostname -I

[commonuser@centos7 ~]$ hostname -I
192.168.1.10 fde4:fb5d:5c27:c800:39b1:ff7e:1d67:16d5
[commonuser@centos7 ~]$

Тази команда ще покаже всички мрежови адреси на хоста, така че ще получите обратно няколко IP адреса, разделени от интервали. Можете да опитате всеки от тях във вашия уеб браузър, за да видите дали работят.

Като алтернатива можете да използвате curl, за да поискате своя IP адрес от icanhazip.com, което ще ви даде вашия публичен IPv4 адрес, както се вижда от друго местоположение в интернет:

curl -4 icanhazip.com

Когато имате IP адресът на вашия сървър, въведете го в адресната лента на браузъра:

http://22.33.44.55/

Ще видите същата уеб страница CentOS 7 Apache по подразбиране.

Зареждането на тази страница показва, че Apache работи правилно. Тя включва и основна информация за важни Apache файлове и директории. Сега, когато услугата е инсталирана и работи, може да използвате различни systemctl команди за управление на услугата.

Управление httpd процеси

Нека разгледаме някои основни команди за управление на уеб сървъра httpd.

За да спрете уеб сървъра, въведете:

sudo systemctl stop httpd

За да стартирате уеб сървъра, когато е спрян, въведете:

sudo systemctl start httpd

За да спрете и след това да стартирате услугата отново, въведете:

sudo systemctl restart httpd

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

sudo systemctl reload httpd

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

sudo systemctl disable httpd

За да активирате отново автоматичното стартиране на услугата, въведете:

sudo systemctl enable httpd

Apache вече ще стартира автоматично, когато сървърът стартира.

Конфигурацията по подразбиране за Apache позволява на сървъра да хоства един уебсайт. Ако планирате да хоствате множество домейни на вашия сървър, ще трябва да конфигурирате виртуални хостове на вашия уеб сървър Apache.

Конфигуриране на тестови домейни в CentOS 7

В примера ще хостваме два фиктивни домейна на сървъра, към които ще изпращаме заявки от други компютри в мрежата (чрез запис в hosts файла на OS) и няма да ползваме DNS системата за резолване на домейните.

С текстов редактор отваряме файла /etc/hosts:

sudo nano /etc/hosts

и въвеждаме следните редове:

192.168.1.10   example.com
192.168.1.10   site1.example.com
192.168.1.10   site2.example.com

Запазваме информацията с Ctrl+O и Enter и затваряме файла с Ctrl+X.

Отваряме hosts файла на операционната система на нашия компютър и въвеждаме същите записи:

192.168.1.10   example.com
192.168.1.10   site1.example.com
192.168.1.10   site2.example.com

Вие трябва да използвате IP адреса на вашия сървър :)

Конфигуриране на виртуални хостове в Apache уеб сървър

Виртуалните хостове в Apache са метод за хостване на няколко домейна (сайта) на един сървър. Това позволява на сървъра да споделя своите ресурси като памет, процесорно време, дисково пространство...

В Apache е възможно създаване на три вида виртуални хостове, базирани на основата на порт, име или IP адрес. Нашият тестов сървър има само един IP адрес, уеб сървъра работи на стандартните HTTP/S портове, затова в примера ще създадем виртуални хостове, базирани на имена.

Apache в CentOS 7 съдържа един сървърен блок, активиран по подразбиране, който е конфигуриран да обслужва документи от директорията /var/www/html.

Вместо да променяме /var/www/html, ще създадем структура от директории в /var/www/ за сайта site1.example.com, оставяйки /var/www/html като директория по подразбиране, която ще се обслужва само ако клиентската заявка не съвпада с друг сайт.

Създаваме html директория за example.com, както използваме флаг -p, за да създадем всички необходими родителски директории:

sudo mkdir -p /var/www/site1.example.com/html

Създайте допълнителна директория за съхранение на лог файлове за сайта:

sudo mkdir -p /var/www/site1.example.com/log

След това задайте собствеността върху html директорията с променливата на околната среда $USER:

sudo chown -R $USER:$USER /var/www/site2.example.com/html

Уверете се, че root директорията на сайта има коректни права:

sudo chmod -R 755 /var/www

След това създайте примерна страница index.html, като използвате предпочитания от вас текстов редактор:

sudo nano /var/www/site1.example.com/html/index.html


  
    SITE1.EXAMPLE.COM
  
  
    

SITE1.EXAMPLE.COM on Apache virtual host!

Запазете информацията с Ctrl+O и Enter и затворете файла, като натиснете Ctrl+X.

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

Преди да създадем виртуалните хостове, ще трябва да създадем директория, в която ще съхраняваме наличните сайтове sites-available. Ще създадем и директория с активираните сайтове sites-enabled, от която Apache ще отговаря на заявките към съответния сайт. Каталогът sites-enabled ще съдържа символични връзки към виртуални хостове, които искаме да публикуваме. Създаваме и двете директории със следната команда:

sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

След това ще кажем на Apache да търси виртуални хостове в директорията на активираните сайтове sites-enabled. За целта редактираме основния конфигурационен файл на Apache и добавяме ред, в който дефинираме незадължителна директория за допълнителни конфигурационни файлове:

sudo nano /etc/httpd/conf/httpd.conf

Добавете този ред в края на файла:

IncludeOptional sites-enabled/*.conf

Запазете и затворете файла, когато приключите с добавянето на този ред. Сега, когато имате вашите виртуални хост директории на място, ще създадете вашия виртуален хост файл.

Започнете, като създадете нов файл в директорията с наличните сайтове:

sudo nano /etc/httpd/sites-available/site1.example.com.conf

Добавете следния конфигурационен блок като ползвате домейна, който ще зарежда сайта - site1.example.com:


    ServerName site1.example.com
    ServerAlias site1
    DocumentRoot /var/www/site1.example.com/html
    ErrorLog /var/www/site1.example.com/log/error.log
    CustomLog /var/www/site1.example.com/log/requests.log combined

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

Запазете информацията и затворете файла.

За да активираме виртуалните хост файлове, създаваме символна връзка за всеки виртуален хост в директорията с активирани сайтове:

sudo ln -s /etc/httpd/sites-available/site1.example.com.conf /etc/httpd/sites-enabled/site1.example.com.conf

Виртуалният хост вече е конфигуриран и готов за показване на съдържание. Но ...

Трябва да конфигурираме защитната стена firewalld и SELinux да разрешат нормалната работа на Apache, т.е. да показва нашите сайтове.

Настройване на защитната стена firewalld

Може да разрешим трафика през firewalld за услуга или през даден порт. Тъй като в примера Apache (httpd) работи на стандартния за HTTP порт 80, може да разрешим достъпа за услугата:

sudo firewall-cmd --permanent --zone=public --add-service=http

Рестартираме firewalld за да запазим и активираме промяната:

sudo firewall-cmd --reload

За повече информация относно firewalld прочетете статията конфигуриране на защитна стена.

Настройване на SELinux за работа с виртуални хостове

SELinux повишава сигурността в CentOS 7 и не се препоръчва деактивиране на kernel модула. SELinux е конфигуриран да работи с конфигурацията на Apache по подразбиране. Тъй като зададохме потребителска директория в конфигурационния файл на виртуалните хостове, ще получим грешка, ако се опитаме да стартираме Apache.

Трябва да актуализираме SELinux правилата, за да има Apache права за писане в необходимите файлове.

Има различни начини за задаване на политики въз основа нуждите на средата, тъй като SELinux позволява да персонализиране нивото на защита. Тази стъпка ще обхване два метода за коригиране на политиките на Apache: универсално и в конкретна директория.

Настройката на политиките за директории е по-сигурна и затова е препоръчителният подход.

Регулиране на политиките на Apache универсално

Настройването на политиката Apache универсално ще каже на SELinux да третира всички процеси в Apache идентично, като използва boolean httpd_unified. Изпълнете следната команда, за да зададете универсална политика на Apache:

sudo setsebool -P httpd_unified 1

Командата setsebool променя булеви стойности на SELinux. Флагът -P ще актуализира стойността на времето за стартиране, като промяната ще продължи при рестартиране. httpd_unified е логическият сигнал, който ще каже на SELinux да третира всички процеси в Apache като един и същ тип, така че го активираме със стойност 1.

Коригиране на политиките на Apache в директория

Индивидуалното задаване на разрешения за SELinux за директорията /var/www/example.com/log осигурява повече контрол над политиките на Apache, но може да изисква и повече поддръжка. Тъй като тази опция не е универсално задаване на политики, ще трябва ръчно да зададете типа контекст за всички нови директории (log), посочени в конфигурацията на виртуалния хост.

Първо проверяваме типа контекст, който SELinux присвоява на директорията /var/www/site1.example.com/log:

sudo ls -dZ /var/www/site1.example.com/log/

Ще видите подобен резултат:

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/site1.example.com/log/

Настоящият контекст е httpdsyscontent_t, което казва на SELinux, че процесът Apache може само да чете файлове в посочената директория. Ще променим типа контекст на директорията /var/www/site1.example.com/log/ в httpdlogt и той ще позволи на Apache да добавя информация в лог файловете:

sudo semanage fcontext -a -t httpd_log_t "/var/www/site1.example.com/log(/.*)?"

Ако получите грешка: sudo: semanage: command not found, инсталирайте semanage като изпълните:

yum install policycoreutils-python

и изпълнете отново предишната команда.

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

sudo restorecon -R -v /var/www/site1.example.com/log

Ще видите следния изход, потвърждаващ промените:

restorecon reset /var/www/site1.example.com/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0

Можете да изброите контекстите още веднъж, за да видите промените:

sudo ls -dZ /var/www/site1.example.com/log/

Резултатът отразява актуализирания тип контекст *httpdlogt*:

drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/site1.example.com/log/

Сега вече сме готови да тестваме сайта от нашия нов виртуален хост.

Тестване на сайт от виртуалния хост

След като контекстът на SELinux бъде актуализиран по един от двата метода, Apache ще получи права за писане в директорията /var/www/site1.example.com/log.

Рестартираме Apache:

sudo systemctl restart httpd

Проверете съдържанието на директорията /var/www/site1.example.com/log, за да видите дали Apache е създал лог файловете:

ls -lZ /var/www/site1.example.com/log

Ще видите, че Apache е създал успашно файловете error.log и requests.log, посочени в конфигурацията на виртуалния хост:

[commonuser@centos7 ~]$ ls -lZ /var/www/site1.example.com/log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 error.log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 requests.log
[commonuser@centos7 ~]$

Зареждаеме в браузър URL http://site1.example.com и се зарежда съдържанието на тестовия index.html файл, който създадохме в началото:

Зареждане на сайт от виртуален хост

Повторихме описаните по-горе стъпки като създадохме виртуален хост за сайта http://site2.example.com като използвахме само универсалната команда за SELinux разрешения.

Ще припомним накратко само стъпките:

sudo mkdir -p /var/www/site2.example.com/html - създаваме директория за файловете на сайта;

sudo mkdir -p /var/www/site2.example.com/log - създаваме директория за логовете на уеб сървъра;

sudo chown -R $USER:$USER /var/www/site2.example.com/html - променяме собствеността върху html директорията;

sudo chmod -R 755 /var/www - задаваме коректни права на директорията на сайтовете;

sudo nano /var/www/site2.example.com/html/index.html - въвеждаме HTML съдържание в тестовия index.html файл;

sudo nano /etc/httpd/sites-available/site2.example.com.conf - създаваме конфигурационния файл на втория виртуален хост (директориите sites-available и sites-enabled вече са създадени при конфигурирането на първия vhost);

sudo ln -s /etc/httpd/sites-available/site2.example.com.conf /etc/httpd/sites-enabled/site2.example.com.conf - създаваме symlink към директорията с активираните сайтове;

sudo firewall-cmd --permanent --zone=public --add-service=http - разрешаваме трафик за услугата http в firewalld;

sudo firewall-cmd --reload - рестартираме защитната стена;

sudo setsebool -P httpd_unified 1 - редактираме SELinux правилата по универсалния метод;

sudo systemctl restart httpd - рестартираме уеб сървъра;

Зареждаме домейна на втория виртуален хост в браузър:

Зареждане на втори сайт от виртуален хост

Заключение

В статията показахме как се инсталира и управлява уеб сървър Apache, как се създават виртуални хостове за обслужване на голям брой сайтове. В следващи статии ще инсталираме сървър за бази данни, PHP и в същите виртуални хостове ще инсталираме различни WordPress сайтове, с които ще направим много интересни и полезни тестове.