Связывание с адресами и портами
Настройка Apache HTTP Server для прослушивания на определенных адресах и портах.
Обзор
| Связанные модули | Связанные директивы |
|---|---|
При запуске httpd он связывается с определенным портом и адресом на локальной машине и ожидает входящие запросы. По умолчанию он прослушивает все адреса на машине. Однако, может потребоваться указать прослушивание на определенных портах, только на выбранных адресах или их комбинации. Это часто используется совместно с функцией Виртуального хоста, которая определяет, как httpd отвечает на различные IP-адреса, имена хостов и порты.
Директива Listen сообщает серверу принимать входящие запросы только на указанных портах или комбинациях адрес-порт. Если в директиве Listen указан только номер порта, сервер прослушивает данный порт на всех интерфейсах. Если указан IP-адрес и порт, сервер будет прослушивать указанный порт и интерфейс. Можно использовать несколько директив Listen для указания нескольких адресов и портов прослушивания. Сервер будет отвечать на запросы с любого из перечисленных адресов и портов.
Например, чтобы сервер принимал подключения на портах 80 и 8000 на всех интерфейсах, используйте:
Listen 80 Listen 8000
Чтобы сервер принимал подключения на порту 80 для одного интерфейса и порту 8000 для другого, используйте
Listen 192.0.2.1:80 Listen 192.0.2.5:8000
IPv6-адреса должны быть заключены в квадратные скобки, как в следующем примере:
Listen [2001:db8::a00:20ff:fea7:ccea]:80
Перекрывающиеся директивы Listen приведут к ошибке, которая помешает запуску сервера.
(48)Address already in use: make_sock: could not bind to address [::]:80
См. обсуждение на вики для получения дополнительных советов по устранению неполадок.
Изменение конфигурации прослушивания при перезапуске
При перезапуске httpd необходимо учитывать изменения в директивах Listen. Во время перезапуска httpd сохраняет привязки портов (как в исходной конфигурации), чтобы избежать ошибок "Отказ в подключении" для новых попыток подключения к серверу. Если изменения в наборе директив Listen приведут к конфликту со старой конфигурацией, конфигурация завершится неудачно, и сервер будет завершен.
Например, изменение конфигурации:
Listen 127.0.0.1:80
на следующую может завершиться неудачей, потому что привязка к порту 80 ко всем адресам конфликтует с привязкой к порту 80 только к 127.0.0.1.
Listen 80
Для применения таких изменений конфигурации необходимо остановить, а затем запустить сервер.
Особые соображения для IPv6
Все больше платформ реализуют IPv6, и APR поддерживает IPv6 на большинстве из них, позволяя httpd выделять IPv6 сокеты и обрабатывать запросы, отправленные через IPv6.
Одна из проблем для администраторов httpd — возможность IPv6 сокета обрабатывать как IPv4-подключения, так и IPv6-подключения. Обработка IPv4-подключений с помощью IPv6-сокета использует IPv4-отображенные IPv6-адреса, которые по умолчанию разрешены на большинстве платформ, но по умолчанию запрещены на FreeBSD, NetBSD и OpenBSD, чтобы соответствовать системной политике на этих платформах. На системах, где это запрещено по умолчанию, специальный параметр configure может изменить это поведение для httpd.
С другой стороны, на некоторых платформах, таких как Linux и Tru64, единственный способ обработать как IPv6, так и IPv4 — использовать отображенные адреса. Если вы хотите, чтобы httpd обрабатывал IPv4 и IPv6-подключения с минимальным количеством сокетов, что требует использования IPv4-отображенных IPv6-адресов, укажите опцию --enable-v4-mapped configure.
--enable-v4-mapped является значением по умолчанию на всех платформах, кроме FreeBSD, NetBSD и OpenBSD, поэтому, скорее всего, ваш httpd был скомпилирован таким образом.
Если вы хотите, чтобы httpd обрабатывал только IPv4-подключения, независимо от того, что будет поддерживать ваша платформа и APR, укажите IPv4-адрес во всех директивах Listen в следующих примерах:
Listen 0.0.0.0:80 Listen 192.0.2.1:80
Если ваша платформа поддерживает это, и вы хотите, чтобы httpd обрабатывал IPv4 и IPv6-подключения на отдельных сокетах (т.е., отключить IPv4-отображенные адреса), укажите опцию --disable-v4-mapped configure. --disable-v4-mapped является значением по умолчанию на FreeBSD, NetBSD и OpenBSD.
Указание протокола с Listen
Необязательный второй аргумент protocol директивы Listen не требуется для большинства конфигураций. Если не указан, https является значением по умолчанию для порта 443, а http — значением по умолчанию для всех остальных портов. Протокол используется для определения модуля, который должен обработать запрос, и для применения оптимизаций, специфичных для протокола, с помощью директивы AcceptFilter.
Вам нужно установить протокол только в случае использования нестандартных портов. Например, для запуска сайта https на порту 8443:
Listen 192.170.2.1:8443 https
Как это работает с виртуальными хостами
Директива Listen не реализует виртуальные хосты — она только сообщает основному серверу, на каких адресах и портах прослушивать. Если не используются директивы <VirtualHost>, сервер будет вести себя одинаково для всех принятых запросов. Однако <VirtualHost> можно использовать для указания различного поведения для одного или нескольких адресов или портов. Чтобы реализовать виртуальный хост, серверу необходимо сначала указать адрес и порт для прослушивания. Затем необходимо создать раздел <VirtualHost> для указанного адреса и порта, чтобы настроить поведение этого виртуального хоста. Обратите внимание, что если <VirtualHost> задан для адреса и порта, на которые сервер не прослушивает, он недоступен.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/bind.html