Назад | Перейти на главную страницу

Как дочерние процессы apache слушают, если они root?

Я вижу здесь: https://httpd.apache.org/docs/current/invoking.html

"Если для параметра Listen, заданного в файле конфигурации, по умолчанию установлено значение 80 (или любой другой порт ниже 1024), то необходимо иметь привилегии root для запуска apache, чтобы он мог связываться с этим привилегированным портом.

После того, как сервер запустился и выполнил несколько предварительных действий, таких как открытие файлов журнала, он запустит несколько дочерних процессов, которые выполняют работу по прослушиванию и ответу на запросы от клиентов. Основной процесс httpd продолжает работать от имени пользователя root, но дочерние процессы работают от имени пользователя с меньшими привилегиями. "

Вопрос: как это сделать дочернему процессу? Входящий запрос поступает на порт 80, к которому теперь привязан мастер.

Я предполагаю, что главный процесс вызовет вызов bind (), а потомок сможет выполнить вызов listen () для привязанного сокета? Или главный сервер передает детям входящие данные?

Первый за: https://httpd.apache.org/docs/current/invoking.html

  1. Потомки наследуют сокет

covener говорит: «Обычно слушающий сокет наследуется дочерними элементами, когда они разветвляются. Они могут либо попытаться вызвать accept на нем, либо они могут бороться за мьютекс и позволить одному войти в accept ()»

Следующий,

  1. Я нашел выход фермы для Solaris дочернего процесса

http://httpd.apache.org/docs/current/misc/perf-tuning.html

В нем также говорится: «... при принятии соединения поток слушателя пробуждает рабочий поток для выполнения обработки запроса».

Для полноты, поскольку это процесс слушателя, я предполагаю, что он уже выполнил listen (). Этого вызова нет в выходных данных фермы выше.