• Дигитални аксесоари
  • сървър
  • Дигитален живот
  • Политика за поверителност
  • Свържете се с нас
  1. Home
  2. Article
  3. Уеб сървъри - Apache | Ubuntu

Уеб сървъри - Apache | Ubuntu

Rsdaa 22/12/2021 1793

HTTPD - уеб сървър Apache2

Apache е най-често използваният уеб сървър на Linux системи. Уеб сървърите се използват за обслужване на уеб страници, поискани от клиентски компютри. Клиентите обикновено заявяват и преглеждат уеб страници с помощта на приложения за уеб браузър като Firefox, Opera, Chromium или Internet Explorer.

Потребителите въвеждат Uniform Resource Locator (URL), за да насочват към уеб сървър посредством неговото пълно квалифицирано име на домейн (FQDN) и път до необходимия ресурс. Например, за да видите началната страница на уеб сайта на Ubuntu, потребителят ще въведе само FQDN:

www.ubuntu.com

За да видите подстраницата на общността, потребителят ще въведе FQDN, последвано от път:

www.ubuntu.com/community

Най-разпространеният протокол, използван за прехвърляне на уеб страници, е протоколът за прехвърляне на хипертекст (HTTP). Протоколи като Hyper Text Transfer Protocol over Secure Sockets Layer (HTTPS) и File Transfer Protocol (FTP), протокол за качване и изтегляне на файлове, също се поддържат.

Уеб сървърите Apache често се използват в комбинация с машината за база данни MySQL, скриптовия език HyperText Preprocessor (PHP) и други популярни скриптови езици като Python и Perl. Тази конфигурация се нарича LAMP (Linux, Apache, MySQL и Perl/Python/PHP) и представлява мощна и стабилна платформа за разработка и внедряване на уеб базирани приложения.

Инсталация

Уеб сървърът Apache2 е наличен в Ubuntu Linux. За да инсталирате Apache2:

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

sudo apt install apache2

Конфигурация

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

apache2.conf: основният конфигурационен файл на Apache2. Съдържа настройки, които са глобални за Apache2.

httpd.conf: исторически основният конфигурационен файл на Apache2, кръстен на демона httpd. В други дистрибуции (или по-стари версии на Ubuntu) файлът може да присъства. В Ubuntu всички опции за конфигурация са преместени в apache2.conf и посочените по-долу директории и този файл вече не съществува.

conf-available: тази директория съдържа налични конфигурационни файлове. Всички файлове, които преди са били в /etc/apache2/conf.d, трябва да бъдат преместени в /etc/apache2/conf-available.

conf-enabled: съдържа символни връзки към файловете в /etc/apache2/conf-available. Когато конфигурационен файл е свързан символично, той ще бъде активиран при следващото рестартиране на apache2.

envvars: файл, където са зададени променливите на средата Apache2.

mods-available: тази директория съдържа конфигурационни файлове както за зареждане на модули, така и за конфигурирането им. Не всички модули обаче ще имат специфични конфигурационни файлове.

mods-enabled: съдържа символни връзки към файловете в /etc/apache2/mods-available. Когато конфигурационен файл на модул е ​​свързан символично, той ще бъде активиран при следващото рестартиране на apache2.

ports.conf: съдържа директивите, които определят кои TCP портове Apache2 слуша.

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

sites-enabled: подобно на mods-enabled, sites-enabled съдържа символни връзки към директорията /etc/apache2/sites-available. По подобен начин, когато конфигурационен файл в sites-available е свързан символично, сайтът, конфигуриран от него, ще бъде активен, след като Apache2 бъде рестартиран.

magic: инструкции за определяне на типа MIME въз основа на първите няколко байта на файл.

В допълнение, други конфигурационни файлове могат да бъдат добавени с помощта на директивата Include и могат да се използват заместващи знаци за включване на много конфигурационни файлове. Всяка директива може да бъде поставена във всеки от тези конфигурационни файлове. Промените в основните конфигурационни файлове се разпознават от Apache2 само когато се стартира или рестартира.

Сървърът също чете файл, съдържащ MIME типове документи; името на файла се задава от директивата TypesConfig, обикновено чрез /etc/apache2/mods-available/mime.conf, което може също да включва добавки и замени, и е /etc/mime.types по подразбиране.

Основни настройки

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

Apache2 се доставя с удобен за виртуален хост конфигурация по подразбиране. Тоест, той е конфигуриран с един виртуален хост по подразбиране (с помощта на директивата VirtualHost), който може да бъде модифициран или използван така, както е, ако имате един сайт, или използван като шаблон за допълнителни виртуални хостове, ако имате множество сайтове. Ако остане сам, виртуалният хост по подразбиране ще служи като ваш сайт по подразбиране или потребителите на сайта ще видят дали URL адресът, който въвеждат, не съвпада с директивата ServerName на някой от персонализираните ви сайтове. За да промените виртуалния хост по подразбиране, редактирайте файла /etc/apache2/sites-available/000-default.conf.

Забележка

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

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

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/mynewsite.conf

Редактирайте новия файл, за да конфигурирате новия сайт, като използвате някои от директивите, описани по-долу.

Директивата ServerAdmin указва имейл адреса, който да бъде рекламиран за администратора на сървъра. Стойността по подразбиране е webmaster@localhost. Това трябва да се промени на имейл адрес, който ви се доставя (ако сте администратор на сървъра). Ако вашият уебсайт има проблем, Apache2 ще покаже съобщение за грешка, съдържащо този имейл адрес, на който да съобщите за проблема. Намерете тази директива в конфигурационния файл на вашия сайт в /etc/apache2/sites-available.

Директивата Listen указва порта и по избор IP адреса, който Apache2 трябва да слуша. Ако IP адресът не е посочен, Apache2 ще слуша всички IP адреси, присвоени на машината, на която работи. Стойността по подразбиране за директивата Listen е 80. Променете това на 127.0.0.1:80, за да накарате Apache2 да слуша само вашия loopback интерфейс, така че да не е достъпен за интернет, на (например) 81, за да промените порта, който той слуша или го оставете както е за нормална работа. Тази директива може да бъде намерена и променена в нейния собствен файл, /etc/apache2/ports.conf

Директивата ServerName не е задължителна и указва на какво FQDN трябва да отговаря вашият сайт. Виртуалният хост по подразбиране няма указана директива ServerName, така че ще отговаря на всички заявки, които не съответстват на директива ServerName в друг виртуален хост. Ако току-що сте придобили името на домейна mynewsite.com и искате да го хоствате на вашия Ubuntu сървър, стойността на директивата ServerName във вашия конфигурационен файл за виртуален хост трябва да бъде mynewsite.com. Добавете тази директива към новия виртуален хост файл, който създадохте по-рано (/etc/apache2/sites-available/mynewsite.conf).

Може също да искате вашият сайт да отговаря на www.mynewsite.com, тъй като много потребители ще приемат, че префиксът www е подходящ. Използвайте директивата ServerAlias ​​за това. Можете също да използвате заместващи символи в директивата ServerAlias.

Например, следната конфигурация ще накара вашия сайт да отговаря на всяка заявка за домейн, завършваща на .mynewsite.com.

ServerAlias ​​*.mynewsite.com

Директивата DocumentRoot указва къде Apache2 трябва да търси файловете, съставляващи сайта. Стойността по подразбиране е /var/www/html, както е посочено в /etc/apache2/sites-available/000-default.conf. Ако желаете, променете тази стойност във виртуалния хост файл на вашия сайт и не забравяйте да създадете тази директория, ако е необходимо!

Активирайте новия VirtualHost с помощта на помощната програма a2ensite и рестартирайте Apache2:

sudo a2ensite mynewsitesudo systemctl рестартирайте apache2.service

Забележка

Не забравяйте да замените mynewsite с по-описателно име за VirtualHost. Един метод е да наименувате файла след директивата ServerName на VirtualHost.

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

sudo a2dissite mynewsitesudo systemctl рестартирайте apache2.service

Настройки по подразбиране

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

Индексът на директорията е страницата по подразбиране, обслужвана от сървъра, когато потребител поиска индекс на директория, като посочи наклонена черта (/) в края на името на директорията.

Например, когато потребител поиска страницата http://www.example.com/this_directory/, той или тя ще получи или страницата DirectoryIndex, ако съществува, генериран от сървъра списък с директории, ако не съществува, и Посочена е опция за индекси или страница с отказано разрешение, ако нито едно от двете не е вярно. Сървърът ще се опита да намери един от файловете, изброени в директивата DirectoryIndex, и ще върне първия намерен. Ако не намери нито един от тези файлове и ако за тази директория са зададени индекси на опции, сървърът ще генерира и върне списък в HTML формат на поддиректориите и файловете в директорията. Стойността по подразбиране, намерена в /etc/apache2/mods-available/dir.conf, е “index.html index.cgi index.pl index.php index.xhtml index.htm”. По този начин, ако Apache2 намери файл в заявена директория, съответстващ на някое от тези имена, първото ще бъде показано.

Директивата ErrorDocument ви позволява да посочите файл, който Apache2 да използва за конкретни събития за грешка. Например, ако потребител поиска ресурс, който не съществува, ще възникне грешка 404. По подразбиране Apache2 просто ще върне HTTP 404 код за връщане. Прочетете /etc/apache2/conf-available/localized-error-pages.conf за подробни инструкции за използване на ErrorDocument, включително местоположения на примерни файлове.

По подразбиране сървърът записва регистрационния файл за прехвърляне във файла /var/log/apache2/access.log. Можете да промените това за всеки сайт в конфигурационните файлове на вашия виртуален хост с директивата CustomLog или да я пропуснете, за да приемете по подразбиране, посочено в/etc/apache2/conf-available/other-vhosts-access-log.conf. Можете също така да посочите файла, в който се регистрират грешките, чрез директивата ErrorLog, чиято подразбиране е /var/log/apache2/error.log. Те се съхраняват отделно от регистрационните файлове за прехвърляне, за да помогнат при отстраняване на проблеми с вашия сървър Apache2. Можете също да посочите LogLevel (стойността по подразбиране е „warn“) и LogFormat (вижте/etc/apache2/apache2.conf за стойността по подразбиране).

Някои опции са посочени на базата на директория, а не на сървър. Опции е една от тези директиви. Строфа на директория е затворена в XML-подобни тагове, като така:

...

Директивата за опции в строфа на директория приема една или повече от следните стойности (наред с други), разделени с интервали:

ExecCGI - Разрешаване на изпълнение на CGI скриптове. CGI скриптовете не се изпълняват, ако тази опция не е избрана.

Внимание

Повечето файлове не трябва да се изпълняват като CGI скриптове. Това би било много опасно. CGI скриптовете трябва да се съхраняват в директория, отделна от и извън вашия DocumentRoot, и само тази директория трябва да има зададена опция ExecCGI. Това е по подразбиране, а местоположението по подразбиране за CGI скриптове е /usr/lib/cgi-bin.

Включва - Разрешаване на включвания от страна на сървъра. Включванията от страна на сървъра позволяват на HTML файл да включва други файлове. Вижте документацията на Apache SSI (Общност на Ubuntu) за повече информация.

IncludesNOEXEC - Разрешаване на включвания от страна на сървъра, но деактивиране на командите #exec и #include в CGI скриптове.

Индекси - Показване на форматиран списък със съдържанието на директорията, ако в исканата директория не съществува DirectoryIndex (като index.html).

Внимание

От съображения за сигурност това обикновено не трябва да се задава и със сигурност не трябва да се задава във вашата директория DocumentRoot. Активирайте внимателно тази опция на базата на директория, само ако сте сигурни, че искате потребителите да виждат цялото съдържание на директорията.

Множество изгледи - Поддържайте договорени по съдържание мултиизгледи; тази опция е деактивирана по подразбиране от съображения за сигурност. Вижте документацията на Apache2 за тази опция.

SymLinksIfOwnerMatch – Следвайте символни връзки само ако целевият файл или директория има същия собственик като връзката.

Настройки на apache2

Този раздел обяснява някои основни настройки за конфигурация на демон на apache2.

LockFile - Директивата LockFile задава пътя към файла за заключване, използван, когато сървърът е компилиран с USE_FCNTL_SERIALIZED_ACCEPT или USE_FLOCK_SERIALIZED_ACCEPT. Трябва да се съхранява на локалния диск. Трябва да се остави стойността по подразбиране, освен ако директорията с регистрационни файлове не се намира в дял на NFS. Ако случаят е такъв, стойността по подразбиране трябва да се промени на място на локалния диск и на директория, която може да се чете само от root.

PidFile – Директивата PidFile задава файла, в който сървърът записва идентификатора на своя процес (pid). Този файл трябва да може да се чете само от root. В повечето случаи трябва да се остави стойността по подразбиране.

Потребител – директивата User задава идентификатора на потребителя, използван от сървъра за отговаряне на заявки. Тази настройка определя достъпа на сървъра. Всички файлове, недостъпни за този потребител, също ще бъдат недостъпни за посетителите на вашия уебсайт. Стойността по подразбиране за Потребител е „www-данни“.

Предупреждение

Освен ако не знаете точно какво правите, не настройвайте потребителската директива на root. Използването на root като потребител ще създаде големи дупки в сигурността на вашия уеб сървър.

Група - Директивата Group е подобна на директивата User. Група задава групата, под която сървърът ще отговаря на заявки. Групата по подразбиране също е „www-данни“.

Модули на Apache2

Apache2 е модулен сървър. Това означава, че само най-основната функционалност е включена в основния сървър. Разширените функции са достъпни чрез модули, които могат да бъдат заредени в Apache2. По подразбиране базов набор от модули е включен в сървъра по време на компилация. Ако сървърът е компилиран да използва динамично заредени модули, тогава модулите могат да бъдат компилирани отделно и добавени по всяко време с помощта на директивата LoadModule. В противен случай Apache2 трябва да се прекомпилира, за да се добавят или премахват модули.

Ubuntu компилира Apache2, за да позволи динамично зареждане на модули. Конфигурационните директиви могат да бъдат условно включени при наличието на конкретен модул, като се затворят в блок.

Можете да инсталирате допълнителни модули Apache2 и да ги използвате с вашия уеб сървър. Например, изпълнете следната команда в терминален ред, за да инсталирате модула Python 3 WSGI:

sudo apt install libapache2-mod-wsgi-py3

Инсталацията ще активира модула автоматично, но можем да го деактивираме с a2dismod:

sudo a2dismod wsgisudo systemctl рестартирайте apache2.service

И след това използвайте помощната програма a2enmod, за да го активирате отново:

sudo a2enmod wsgisudo systemctl рестартирайте apache2.service

Вижте директорията /etc/apache2/mods-available за допълнителни модули, които вече са налични във вашата система.

Конфигурация на HTTPS

Модулът mod_ssl добавя важна функция към сървъра Apache2 - способността за криптиране на комуникации. По този начин, когато вашият браузър комуникира чрез SSL, префиксът https:// се използва в началото на Uniform Resource Locator (URL) в лентата за навигация на браузъра.

Модулът mod_ssl е наличен в пакет apache2-common. Изпълнете следната команда в подканата на терминала, за да активирате модула mod_ssl:

sudo a2enmod ssl

Има HTTPS конфигурационен файл по подразбиране в /etc/apache2/sites-available/default-ssl.conf. За да може Apache2 да предоставя HTTPS, също са необходими сертификат и ключов файл. HTTPS конфигурацията по подразбиране ще използва сертификат и ключ, генерирани от пакета ssl-cert. Те са добри за тестване, но автоматично генерираният сертификат и ключ трябва да бъдат заменени със сертификат, специфичен за сайта или сървъра. За информация относно генерирането на ключ и получаването на сертификат вижте Сертификати.

За да конфигурирате Apache2 за HTTPS, въведете следното:

sudo a2ensite default-ssl

Забележка

Директориите /etc/ssl/certs и /etc/ssl/private са местоположенията по подразбиране. Ако инсталирате сертификата и ключа в друга директория, не забравяйте да промените SSLCertificateFile и SSLCertificateKeyFile по подходящ начин.

С Apache2 вече конфигуриран за HTTPS, рестартирайте услугата, за да активирате новите настройки:

sudo systemctl рестартирайте apache2.service

Забележка

В зависимост от начина, по който сте получили своя сертификат, може да се наложи да въведете парола, когато Apache2 стартира.

Можете да получите достъп до защитените сървърни страници, като напишете https://your_hostname/url/ в адресната лента на браузъра си.

Разрешение за споделяне на запис

За да може повече от един потребител да пише в една и съща директория, ще е необходимо да се даде разрешение за запис на група, която споделят общо. Следващият пример дава споделено разрешение за запис в /var/www/html на групата „webmasters“.

sudo chgrp -R webmasters /var/www/htmlsudo chmod -R g=rwX /var/www/html/

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

Предупреждение

Демонът apache2 ще работи като потребител на www-data, който има съответна група www-data. На тях не трябва да се предоставя достъп за запис до корена на документа, тъй като това би означавало, че уязвимостите в Apache или приложенията, които обслужва, биха позволили на атакуващите да презапишат обслужваното съдържание.

Препратки

Документацията на Apache2 съдържа подробна информация относно директивите за конфигурация на Apache2. Също така вижте пакета apache2-doc за официалните документи на Apache2.

Готварската книга за Apache на O’Reilly е добър ресурс за извършване на конкретни конфигурации на Apache2.

За специфични за Ubuntu въпроси относно Apache2, попитайте в #ubuntu-server IRC канала на freenode.net.


PREV: „Не мога да се свържа с вашия DHCP сървър“ *Решение* – Xbox One

NEXT: Как да изтрия сървър на Discord – готово

Popular Articles

Hot Articles

Navigation Lists

Back to Top