Веб-сервер — специализированная программа, которая обрабатывает запросы клиентов к веб-приложениям. Когда мы загружаем страницу в браузере, мы обращаемся к веб-серверу, расположенному на удаленном сервере. Кроме главной функции у веб-серверов большое количество вспомогательных. Среди них кеширование, перезапись запросов, раздача статики, например, картинок, балансировка нагрузки и многое другое.
Веб-сервера не имеют информации о том, на каком языке написан сайт. Процедуры взаимодействия между веб-сервером и сайтом стандартизированы на всех языках. Благодаря этому число веб-серверов ограничено, и они могут обрабатывать сайты, написанные на любом языке.
Первым и простым способом взаимодействия веб-сервера с кодом сайта был стандарт CGI (Common Gateway Interface). Он был разработан с учетом того, что сервер не должен зависеть от языка программирования, используемого для написания сайта. Он использует переменные окружения для передачи параметров запроса веб-серверу.
Сайт представляет собой исполняемый файл, который запускается веб-сервером во время обработки входящего запроса и передает в него все параметры запроса через переменные окружения. Всё, что требуется от скрипта, — это вернуть HTTP-ответ в стандартный вывод (STDOUT). Общий алгоритм работы выглядит так:
- Клиент запрашивает страницу сайта
- Веб-сервер принимает запрос и устанавливает переменные окружения. Через них приложению передаются данные и служебная информация
- Веб-сервер перенаправляет запросы через стандартный поток ввода (stdin) на вход вызываемой программы
- CGI-приложение выполняет все необходимые операции и формирует результаты в виде HTML
- Сформированный гипертекст возвращается веб-серверу через стандартный поток вывода (stdout). Сообщения об ошибках передаются через поток ошибок (stderr)
- Веб-сервер передает результаты запроса клиенту
В режиме CGI каждый запрос запускает скрипт сайта заново. Это означает, что вся логика инициализации отрабатывает для каждого запроса по новой, а после выполнения запроса скрипт завершается. Если между запросами есть информация, которую нужно сохранить, например, данные пользователя, то это отправляют в хранилище, файловую систему или базу данных.
Реализации
Существует много разных веб-серверов. Некоторые из них встроены в PHP, а другие — общего назначения.
Самым эффективным и популярным веб-сервером на данный момент является Nginx. С ним нам и стоит познакомиться. Для разработки он не понадобится, так как в PHP встроен свой сервер, но в продакшен-среде без него никак.
Помимо этих серверов в PHP мире до сих пор популярен Apache. Его можно использовать только в случае, если нет другого выбора, например, если хостинг предлагает только его. В остальных случаях предпочтительнее использовать Nginx. Это связано с различиями в работе самих серверов. Apache работает по модели «поток за запрос», что является более затратным и медленным в сравнении с асинхронной моделью Nginx.
Самостоятельная работа
Установите nginx и убедитесь в том, что он запускается и работает. Сделать это можно по одному из руководств в сети, которые гуглятся так: php nginx <имя вашей операционной системы>
. Это задание повышенной сложности. Если не получается прямо сейчас, то не тратьте время, сначала пройдите курс, а затем попробуйте еще раз.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.