Если Apache всегда казался вам черным ящиком, самое время узнать, что происходит за кулисами!
Apache — самый популярный веб-сервер.
Работа веб-сервера заключается в том, чтобы принимать запросы от клиентов и отправлять ответы на эти запросы. Веб-сервер получает URL-адрес, переводит его в имя файла (для статических запросов) и отправляет этот файл через Интернет с локального диска или переводит его в имя программы (для динамических запросов), выполняет его, а затем отправляет вывод этой программы обратно через Интернет запрашивающей стороне. Если по какой-либо причине веб-сервер не смог обработать и завершить запрос, он вместо этого возвращает сообщение об ошибке. Слово «веб-сервер» может относиться к самой машине (компьютеру / оборудованию) или программному обеспечению, которое получает запросы и отправляет ответы.
Apache — самый популярный веб-сервер (после которого IIS от Microsoft). Причины его популярности, чтобы назвать несколько, являются:
- Это бесплатно скачать и установить.
- Это открытый исходный код: исходный код виден всем и каждому, что в основном позволяет любому (кто может принять вызов) настроить код, оптимизировать его, исправить ошибки и дыры в безопасности. Люди могут добавлять новые функции и писать новые модули.
- Он отвечает всем потребностям: Apache можно использовать для небольших веб-сайтов с одной или двумя страницами или для огромных веб-сайтов с сотнями и тысячами страниц, обслуживающих миллионы постоянных посетителей каждый месяц. Может обслуживать как статический, так и динамический контент.
Что такое 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
Основная роль 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 — это два протокола, построенных один поверх другого.
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 \
Inetd
Чтобы сохранить системные ресурсы, 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 года, и на нем работает более половины веб-сайтов. Он сыграл ключевую роль в формировании и превращении Всемирной паутины в то, чем она является сегодня. Причины его успеха очевидны и то, как все выглядит, он, вероятно, будет лидировать, по крайней мере, в течение достаточно долгого времени. Предполагалось, что это будет вводная сессия для этого мощного программного обеспечения, и я надеюсь, что это помогло понять, что это за замечательный инструмент и как он вообще работает.