Описание: Контролируйте, какие хосты могут получить доступ к определенной области сервера. Синтаксис: Разрешить from all|host|env=env-variable [host|env=env-variable] ...
Контекст: каталог, .htaccess.
Покрытие: лимит
Статус: База
Модуль: mod_access
Директива Allow влияет на то, какие хосты могут получить доступ к определенной области сервера. Доступом можно управлять с помощью характеристик запроса клиента, зафиксированных в именах хостов, IP-адресах, диапазонах IP-адресов или других переменных среды.
Первый параметр этой директивы всегда from. Последующие параметры могут принимать три разные формы. Если указано «Разрешить от всех», доступ разрешен всем хостам, что требует настройки директив Deny и Order, как описано ниже. Чтобы разрешить доступ к серверу только определенному подмножеству хостов или групп хостов, хост можно указать в любом из следующих форматов:
Доменное имя (часть)
Пример: Разрешить с apache.org
Разрешить доступ хостам, имена которых совпадают с заданной строкой или заканчиваются ею. Сопоставляются только компоненты полного имени, поэтому приведенный выше пример будет соответствовать foo.apache.org, но не fooapache.org. Такая конфигурация заставит сервер выполнить операцию обратного поиска доменного имени по IP-адресу клиента независимо от того, устанавливает ли директива HostnameLookups полный IP-адрес. Пример: Разрешить из 10.1.2.3.
Разрешить доступ с одного IP-адреса одного хоста.
Некоторые примеры IP-адресов: Разрешить с версии 10.1.
Первые 1–3 байта IP-адреса используются для ограничения подсети.
Пример пары сеть/маска: Разрешить с 10.1.0.0/255.255.0.0
сеть abcd и маска wxyz. Для более точных ограничений подсети.
Сеть/nnn Пример спецификации внутриобластной маршрутизации: разрешено с 10.1.0.0/16.
Аналогично предыдущему случаю, за исключением того, что маска состоит из nnn байтов старшего порядка.
Обратите внимание, что последние три примера выше соответствуют одному и тому же набору хостов.
Адреса IPv6 и подсети IPv6 можно указать следующим образом:
Разрешить с fe80::a00:20ff:fea7:ccea
Разрешить с fe80::a00:20ff:fea7:ccea/10
Третий формат параметра директивы Allow разрешает доступ к серверу, указанному расширением переменной среды. Если указано Разрешить из env=env-variable, запрос на доступ разрешается, если существует переменная среды env-variable. Используя директивы, предоставляемые mod_setenvif, сервер предоставляет возможность гибко устанавливать переменные среды на основе запросов клиента. Таким образом, эту директиву можно использовать для разрешения доступа на основе таких полей, как User-Agent (тип браузера), Referer или других полей заголовка HTTP-запроса.
пример:
SetEnvIf User-Agent ^KnockKnock/2.0 let_me_in
<Каталог /docroot>
Запретить заказ, Разрешить
Отказаться от всех
Разрешить из env=let_me_in
</Каталог>
В этом случае браузерам, отправляющим идентификаторы пользовательского агента, начинающиеся с KnockKnock/2.0, будет разрешен доступ, а все остальные браузеры будут заблокированы.
Описание инструкции Deny: Укажите, каким хостам запрещен доступ к серверу. Синтаксис: Deny from all|host|env=env-variable [host|env=env-variable] ...
Контекст: каталог, .htaccess.
Покрытие: лимит
Статус: База
Модуль: mod_access
Эта директива позволяет ограничить доступ к серверу на основе имени хоста, IP-адреса или переменных среды. Настройки параметров команды Deny точно такие же, как и у команды Allow.
Описание инструкции заказа: управляет статусом доступа по умолчанию и порядком, в котором оцениваются инструкции «Разрешить» и «Запретить».
Синтаксис: Порядок заказа
Значение по умолчанию: Запретить заказ, Разрешить.
Контекст: каталог, .htaccess.
Покрытие: лимит
Статус: База
Модуль: mod_access
Директива Order управляет статусом доступа по умолчанию и порядком, в котором оцениваются директивы Allow и Deny. Заказ является одним из следующих примеров:
Запретить, Разрешить
Инструкции Deny оцениваются перед инструкциями Allow. По умолчанию весь доступ разрешен. Любому клиенту, который не соответствует директиве Deny или соответствует директиве Allow, разрешен доступ к серверу.
Разрешить, Запретить
Директива Allow оценивается перед директивой Deny. По умолчанию любой доступ запрещен. Любому клиенту, который не соответствует директиве Allow или директиве Deny, будет запрещен доступ к серверу.
Взаимная неудача
Доступ разрешен только хостам, которые указаны в списке разрешенных, а не в списке запрещенных. Этот порядок имеет тот же эффект, что и Order Allow, Deny, и является устаревшим. Какую конфигурацию он включает?
Ключевые слова можно разделять только запятыми, между ними не может быть пробелов. Обратите внимание, что каждый оператор директивы Allow и Deny будет оцениваться во всех случаях.
В приведенном ниже примере доступ разрешен всем хостам в домене apache.org, тогда как доступ к любому другому хосту запрещен.
Запретить заказ, Разрешить
Отказаться от всех
Разрешить с apache.org
В следующем примере доступ разрешен всем хостам в домене apache.org, за исключением хостов, содержащихся в субдомене foo.apache.org, которым доступ запрещен. Всем хостам, не входящим в домен apache.org, доступ запрещен, поскольку по умолчанию доступ к серверу запрещен.
Разрешить заказ, запретить
Разрешить с apache.org
Запретить с foo.apache.org
С другой стороны, если директиву Order в предыдущем примере изменить на Deny,Allow, доступ со всех хостов будет разрешен. Это связано с тем, что независимо от фактического порядка директив в файле конфигурации директива Allow from apache.org будет оцениваться последней и перезаписывать предыдущую директиву Deny из foo.apache.org. Всем хостам, не входящим в домен apache.org, также разрешен доступ, поскольку статус по умолчанию был изменен на «Разрешено».
Даже если она не сопровождается инструкциями «Разрешить» и «Запретить», наличие инструкции «Порядок» повлияет на доступ к определенной части сервера. Это связано с ее влиянием на состояние доступа по умолчанию. Например,
<Каталог /www>
Разрешить заказ, запретить
</Каталог>
Это отключит весь доступ к каталогу /www, поскольку по умолчанию будет установлено состояние «Запретить».
Директива Order управляет обработкой инструкций доступа только внутри каждого сегмента конфигурации сервера. Это означает, что, например, директива Allow или Deny, появляющаяся в разделе <Location>, всегда будет оцениваться после директивы Allow или Deny, появляющейся в разделе <Directory> или файле .htaccess, независимо от настройки директивы Order. Почему. Подробную информацию об объединении разделов конфигурации см. в разделе «Как работают разделы «Каталог», «Местоположение» и «Файлы».