Статьи

Введение в Apache

Если Apache всегда казался вам черным ящиком, самое время узнать, что происходит за кулисами!

Apache — самый популярный веб-сервер.

Работа веб-сервера заключается в том, чтобы принимать запросы от клиентов и отправлять ответы на эти запросы. Веб-сервер получает URL-адрес, переводит его в имя файла (для статических запросов) и отправляет этот файл через Интернет с локального диска или переводит его в имя программы (для динамических запросов), выполняет его, а затем отправляет вывод этой программы обратно через Интернет запрашивающей стороне. Если по какой-либо причине веб-сервер не смог обработать и завершить запрос, он вместо этого возвращает сообщение об ошибке. Слово «веб-сервер» может относиться к самой машине (компьютеру / оборудованию) или программному обеспечению, которое получает запросы и отправляет ответы.

Apache — самый популярный веб-сервер (после которого IIS от Microsoft). Причины его популярности, чтобы назвать несколько, являются:

  1. Это бесплатно скачать и установить.
  2. Это открытый исходный код: исходный код виден всем и каждому, что в основном позволяет любому (кто может принять вызов) настроить код, оптимизировать его, исправить ошибки и дыры в безопасности. Люди могут добавлять новые функции и писать новые модули.
  3. Он отвечает всем потребностям: Apache можно использовать для небольших веб-сайтов с одной или двумя страницами или для огромных веб-сайтов с сотнями и тысячами страниц, обслуживающих миллионы постоянных посетителей каждый месяц. Может обслуживать как статический, так и динамический контент.

Функциональность, которая вам не нужна или не нужна, может быть легко удалена.

HTTP-сервер Apache — это программное обеспечение (или программа), которое работает в фоновом режиме под соответствующей операционной системой, поддерживает многозадачность и предоставляет сервисы для других приложений, которые к нему подключаются, таких как клиентские веб-браузеры. Сначала он был разработан для работы с операционными системами Linux / Unix, но позже был адаптирован для работы под другими системами, включая Windows и Mac. Двоичный файл Apache, работающий под UNIX, называется HTTPd (сокращение от HTTP-демона), а под win32 — Apache.exe .

Установка Apache в Linux требует немного навыков программирования (хотя это не так уж сложно). Установить его на платформе Windows просто, так как вы можете запустить его через графический интерфейс пользователя.

Исходное ядро ​​Apache довольно простое и содержит ограниченное количество функций. Его мощь, скорее всего, связана с дополнительными функциями, представленными во многих модулях, которые написаны программистами и могут быть установлены для расширения возможностей сервера. Чтобы добавить новый модуль, все, что вам нужно сделать, это установить его и перезапустить сервер Apache. Функциональность, которая вам не нужна или не нужна, может быть легко удалена, что на самом деле считается хорошей практикой, поскольку она делает сервер небольшим и легким, запускается быстрее, потребляет меньше системных ресурсов и памяти и делает сервер менее подверженным уязвимостям безопасности. Сервер Apache также поддерживает сторонние модули, некоторые из которых были добавлены в Apache 2 в качестве постоянных функций. Сервер Apache очень легко интегрируется с другими приложениями с открытым исходным кодом, такими как PHP и MySQL, что делает его еще более мощным, чем он есть.

В простейшем виде веб-сервер — это компьютер со специальным программным обеспечением и интернет-соединением, которое позволяет ему подключаться к другим устройствам.

Каждое устройство, подключенное к сети, имеет IP-адрес, через который другие подключаются и взаимодействуют с ним. Этот IP-адрес похож на обычный адрес, который вам нужен в реальной жизни, чтобы позвонить или посетить любой ваш контакт. Если бы у них не было адреса, вы бы не знали, как позвонить или связаться с ними. IP-адреса служат той же цели. Если устройство не имеет такового, другие машины в той же сети не будут знать, как добраться до него.

Сервер Apache предлагает ряд сервисов, которые могут использовать клиенты. Эти услуги предлагаются с использованием различных протоколов через разные порты и включают в себя: протокол передачи гипертекста (HTTP), обычно через порт 80, простой протокол передачи почты (SMTP), обычно через порт 25, службу доменных имен (DNS) для сопоставления доменных имен с их соответствующие IP-адреса, обычно через порт 53, и протокол передачи файлов (FTP) для загрузки и выгрузки файлов, обычно через порт 21.


Основная роль Apache — связь по сетям, и он использует протокол TCP / IP (протокол управления передачей / интернет-протокол, который позволяет устройствам с IP-адресами в одной сети обмениваться данными друг с другом).

Протокол TCP / IP — это набор правил, которые определяют, как клиенты отправляют запросы и как серверы отвечают, и определяют, как данные передаются, доставляются, принимаются и подтверждаются.

Сервер Apache настроен для работы с файлами конфигурации, в которые добавляются директивы для управления его поведением. В неактивном состоянии Apache прослушивает IP-адреса, указанные в его файле конфигурации (HTTPd.conf). Всякий раз, когда он получает запрос, он анализирует заголовки, применяет правила, указанные для него в файле конфигурации, и предпринимает действия.

Но на одном сервере может размещаться множество веб-сайтов, а не один, хотя внешнему миру они кажутся отделенными друг от друга. Для этого каждому из этих веб-сайтов должно быть присвоено свое имя, даже если все они в конечном итоге отображаются на одном компьютере. Это достигается с помощью так называемых виртуальных хостов.

Поскольку IP-адреса трудно запомнить, мы, как посетители определенных сайтов, обычно вводим соответствующие доменные имена в поле URL-адреса в наших браузерах. Затем браузер подключается к DNS-серверу, который переводит доменные имена в их IP-адреса. Затем браузер берет возвращенный IP-адрес и подключается к нему. Браузер также отправляет заголовок Host с запросом, чтобы, если на сервере размещено несколько сайтов, он знал, какой из них следует обслуживать.

Например, введя www.google.com в поле адреса вашего браузера, можно отправить следующий запрос на сервер с этим IP-адресом:

1
2
GET / HTTP/1.1
Host: www.google.com

Первая строка содержит несколько частей информации. Во-первых, есть метод (в данном случае это GET), URI, который указывает, какую страницу нужно извлечь или какую программу запустить (в данном случае это корневой каталог, обозначенный /), и, наконец, есть Версия HTTP (в данном случае это HTTP 1.1).

HTTP — это протокол без сохранения состояния запроса / ответа.

HTTP — это протокол без сохранения состояния запроса / ответа. Это набор правил, которые управляют связью между клиентом и сервером. Клиент (обычно, но не обязательно, веб-браузер) делает запрос, сервер отправляет ответ, и связь прекращается. Сервер не ожидает дальнейшего обмена данными, как в случае с другими протоколами, которые остаются в состоянии ожидания после завершения запроса.

Если запрос выполнен успешно, сервер возвращает код состояния 200 (что означает, что страница найдена), заголовки ответа и запрошенные данные. Заголовок ответа сервера Apache может выглядеть примерно так:

01
02
03
04
05
06
07
08
09
10
HTTP/1.1 200 OK
Date: Sun, 10 Jun 2012 19:19:21 GMT
Server: Apache
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Last-Modified: Sun, 10 Jun 2012 19:19:21 GMT
Vary: Accept-Encoding,User-Agent
Content-Type: text/html;
Content-Length: 7560

Первая строка в заголовке ответа — это строка состояния. Он содержит версию HTTP и код состояния. Далее следует дата, а затем некоторая информация о хост-сервере и извлеченных данных. Заголовок Content-Type позволяет клиенту узнать тип полученных данных, чтобы он знал, как с ними обращаться. Content-Length позволяет клиенту узнать размер тела ответа. Если запрос не выполняется, клиент получит код ошибки и сообщение, например, следующий заголовок ответа в случае ошибки «страница не найдена»:

1
HTTP/1.1 404 Not Found

TCP / IP — это два протокола, построенных один поверх другого.

TCP / IP — это два протокола, построенных один поверх другого. Протокол IP отвечает за передачу переданных данных из одной точки в другую. Он принимает данные, которые должны быть переданы между двумя точками, разбивает их на более мелкие пакеты, присоединяет адреса источника и назначения к каждому пакету и передает данные.

TCP обрабатывает часть, которая включает в себя установление соединения между двумя сторонами, обеспечивая доставку данных к месту назначения, заботясь о любой потере данных и управляя восстановлением данных.

Как только сообщение получено, сторона назначения отправляет сообщение с подтверждением (ACK) отправляющему хосту, если все идет хорошо, уведомляя его о прибытии данных. Если что-то идет не так, как, например, возникновение ситуации потери данных, пункт назначения вместо этого отправляет сообщение «Не подтверждено» (NAK), уведомляя отправляющий хост о проблеме и информируя его о необходимости повторной отправки пакета данных.

Как уже говорилось ранее, Apache предлагает множество сервисов, к которым клиенты могут захотеть подключиться, использовать их или воспользоваться ими. TCP управляет каждой службой так, чтобы к ней обращались через определенный порт, чтобы различать разные службы. Таким образом, он гарантирует, что любой данный интерфейс (или хост) может предлагать несколько услуг. Поэтому, когда клиент подключается к хосту, он передает номер порта вместе с IP-адресом. Браузеры используют протокол HTTP, который по умолчанию использует порт 80, поэтому нет необходимости в дальнейшей спецификации.

Следующее изображение является снимком моего программного обеспечения FTP (WinScp). Как видите, для FTP моего сервера мне нужно не только указать IP-адрес (или, альтернативно, ввести имя домена), но также указать номер порта, через который мой сервер предоставляет услугу. В случае FTP номер порта равен 21. В случае SFTP (защищенного FTP) номер порта равен 22.

Под UNIX список услуг, предлагаемых вместе с соответствующими номерами портов, можно найти в файле / etc / services . Следующая команда отобразит содержимое файла:

1
more /etc/services

Ниже приведен скриншот, показывающий часть файла. Как вы можете видеть, сервисы перечислены в первом столбце, за ними следует номер порта, к которому осуществляется доступ, и имя протокола, который использует сервис.

В Windows файл называется Services, и его можно найти в C: \ WINNT \ system32 \ drivers \ etc \


Чтобы сохранить системные ресурсы, UNIX обрабатывает многие из своих сервисов через интернет-демон.

Чтобы сохранить системные ресурсы, UNIX обрабатывает многие из своих сервисов через интернет-демон (inetd) , в отличие от постоянно работающего демона. Inetd — это супер-сервер, который прослушивает различные порты и обрабатывает запросы на подключение по мере их получения, инициируя новую копию соответствующего демона (программы). Затем новая копия программы берет ее оттуда и работает с клиентом, а inted возвращается к прослушиванию портов сервера, ожидающих обработки новых клиентских запросов. Как только запрос обработан и связь завершена, демон завершается.


Как упоминалось ранее, Apache может быть установлен на различных операционных системах. Независимо от используемой платформы, размещенный веб-сайт обычно имеет четыре основных каталога: htdocs , conf , logs , cgi-bin .

htdocs — это каталог документов веб-сервера Apache по умолчанию, то есть это общедоступный каталог, содержимое которого обычно доступно для клиентов, подключающихся через Интернет. Он содержит все статические страницы и динамический контент, который будет обслуживаться после получения HTTP-запроса для них. Поскольку файлы и подкаталоги в htdoc доступны для общественности, правильная обработка прав доступа к файлам имеет большое значение, чтобы не поставить под угрозу безопасность сервера.

conf — это каталог, в котором находятся все файлы конфигурации сервера. Файлы конфигурации в основном представляют собой простые текстовые файлы, в которые добавляются директивы для управления поведением и функциональностью веб-сервера. Каждая директива обычно помещается на отдельной строке, а ключ хеша (#) указывает на комментарий, поэтому строка, обработанная им, игнорируется.

logs — это каталог, в котором хранятся журналы сервера, и включает журналы доступа Apache и журналы ошибок. HTTP-сервер Apache предоставляет множество различных механизмов для регистрации всего, что происходит на нем, от первоначального запроса до процесса сопоставления URL-адресов, до окончательного разрешения соединения, включая любые ошибки, которые могли возникнуть в процессе. В дополнение к этому сторонние модули могут предоставлять возможности ведения журнала или вставлять записи в существующие файлы журнала, а приложения, такие как сценарии PHP или другие обработчики, могут отправлять сообщения в журнал ошибок сервера.

cgi-bin — это каталог, в котором хранятся CGI-скрипты. CGI (Common Gateway Interface) определяет способ взаимодействия веб-сервера с внешними программами, генерирующими контент, которые часто называют CGI-программами или CGI-скриптами. Это программы или сценарии оболочки, которые написаны для выполнения Apache от имени своих клиентов.

Важно отметить, что вышеупомянутые имена файлов и каталогов (а также их расположение) могут отличаться на разных серверах в зависимости от установленного варианта Apache и операционной системы, в которой он работает. Роли, хотя и остаются прежними.


… с более чем половиной сайтов в Интернете, работающих на нем.

Apache является самым популярным веб-сервером в Интернете с 1996 года, и на нем работает более половины веб-сайтов. Он сыграл ключевую роль в формировании и превращении Всемирной паутины в то, чем она является сегодня. Причины его успеха очевидны и то, как все выглядит, он, вероятно, будет лидировать, по крайней мере, в течение достаточно долгого времени. Предполагалось, что это будет вводная сессия для этого мощного программного обеспечения, и я надеюсь, что это помогло понять, что это за замечательный инструмент и как он вообще работает.