Эта директива включает специфичную для операционной системы оптимизацию прослушивающего сокета по Protocol
типу. Основная предпосылка заключается в том, что ядро не отправляет сокет серверному процессу до тех пор, пока не будут получены данные или весь HTTP-запрос не будет буферизован. TCP_DEFER_ACCEPT
В настоящее время поддерживаются только фильтры принятия FreeBSD, более примитивные фильтры Linux
и оптимизированный AcceptEx() для Windows.
Использование none
в качестве аргумента отключит любые фильтры приема для этого протокола. Это полезно для протоколов, которые требуют, чтобы сервер сначала отправлял данные, например ftp:
или nntp
:
AcceptFilter nntp none
Имена протоколов по умолчанию предназначены https
для порта 443 и http
для всех остальных портов. Чтобы указать, что с портом прослушивания используется другой протокол, добавьте
в директиву аргумент протокола Listen
.
Значения по умолчанию во FreeBSD:
AcceptFilter http httpready
AcceptFilter https dataready
Фильтр httpready
принятия буферизует целые HTTP-запросы на уровне ядра. Как только весь запрос получен, ядро отправляет его на сервер. См. справочную страницу accf_http(9) для более подробной информации. Поскольку HTTPS-запросы шифруются, используется только фильтр accf_data(9).
Значения по умолчанию в Linux:
AcceptFilter http data
AcceptFilter https data
Linux TCP_DEFER_ACCEPT
не поддерживает буферизацию HTTP-запросов. Любое значение, кроме того, none
будет включено
TCP_DEFER_ACCEPT
для этого слушателя. Для получения дополнительной информации см. справочную страницу Linux tcp(7).
Значения по умолчанию в Windows:
AcceptFilter http connect
AcceptFilter https connect
Window mpm_winnt интерпретирует AcceptFilter для переключения API AcceptEx() и не поддерживает буферизацию протокола http. connect
будет использовать API AcceptEx(), а также получать адреса конечных точек сети, но, как и в случае с none
опцией connect
, не ожидает начальной передачи данных.
В Windows none
использует accept(), а не AcceptEx() и не будет повторно использовать сокеты между соединениями. Это полезно для сетевых адаптеров с нарушенной поддержкой драйверов, а также для некоторых поставщиков виртуальных сетей, таких как драйверы vpn или фильтры спама, вирусов или шпионского ПО.
AcceptFilter data
(Windows)
Для версий 2.4.23 и более ранних фильтр приема Windows data
ждал, пока данные не будут переданы, а начальный буфер данных и адреса конечных точек сети не будут получены из единственного вызова AcceptEx(). Эта реализация подверглась атаке типа «отказ в обслуживании» и была отключена.
Текущие выпуски httpd по умолчанию используют connect
фильтр в Windows и будут возвращаться к нему, connect
если
data
он указан. Пользователям предыдущих выпусков рекомендуется добавить явную настройку connect
для своего AcceptFilter, как показано выше.
Смотрите также