Задать вопрос
@topuserman

Как работает веб-сервер и php?

Уже давно работаю веб-разработчиком, и честно говоря никогда не углублялся в работу веб-сервера, и задач таких не было.

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

Я всегда использовал классическую схему веб-сервера: apache+nginx.
И все что я знаю:
  1. nginx выполняет роль первого слоя, и всю статику сразу отдает сам.
  2. остальные запросы отдает следующему слою - apache
  3. apache уже сам взаимодействует через некий интерфейс (насколько понимаю, называется SAPI) с ядром php.


Правильно ли понимаю, SAPI - это способ взаимодействия системы (nginx или apache) с php ?

Как работает схема, когда используется чисто nginx ? там какой-то свой sapi используется же ?

Буду благодарен, если кто-то схематично опишет и расскажет, связи между этими компонентами, и зоны их ответственности.
  • Вопрос задан
  • 2210 просмотров
Подписаться 2 Простой 14 комментариев
Пригласить эксперта
Ответы на вопрос 2
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
У apache есть модуль mod_php, который обрабатывает код.
У nginx\lighttpd модуля нет и им нужен отдельный сервис\сервер, которому они передадут код через TCP или unix soсket.
Для php это php-fpm
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
Ещё раз: два веб-сервера - это очевидный костыль, вызванный только кривизной рук пользователя, но никак не технической необходимостью.

Веб-сервер, разумеется, нужен только один.
Класическая схема в 2020 году - один веб-сервер и РНР подключённый через FastCGI РНР.
Это может быть как Nginx+PHP-FPM
Так и Apache MPM Event+PHP-FPM. Если ставить апач в современных дистрибутивах, то этот вариант устанавливается по умолчанию.

В итоге всё сводится к старому как экскремент мамонта протоколу CGI: веб-сервер перенаправляет запрос программе-обработчику (в данном случае РНР), программа-обработчик возвращает НТТР заголовки и (опционально) тело ответа, веб-сервер отдает их клиенту.

В самом простом варианте отдельный веб-сервер не требуется, см встроенный сервер в РНР.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы