Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_proxy

Описание: Многопротокольный прокси-сервер/шлюз
Статус: Расширение
Идентификатор модуля: proxy_module
Исходный файл: mod_proxy.c

Краткое описание

Предупреждение

Не включайте проксирование с помощью ProxyRequests, пока не обеспечите безопасность сервера. Открытые прокси-серверы опасны как для вашей сети, так и для Интернета в целом.

mod_proxy и связанные модули реализуют прокси-сервер/шлюз для Apache HTTP Server с поддержкой ряда популярных протоколов, а также нескольких различных алгоритмов балансировки нагрузки. Сторонние модули могут добавить поддержку дополнительных протоколов и алгоритмов балансировки нагрузки.

Для обеспечения необходимых возможностей в сервер необходимо загрузить набор модулей. Эти модули могут быть включены статически на этапе сборки или динамически с помощью директивы LoadModule). В набор должны входить:

  • mod_proxy, обеспечивающий базовые возможности прокси-сервера
  • mod_proxy_balancer и один или несколько модулей балансировщика, если требуется балансировка нагрузки. (Дополнительные сведения см. в mod_proxy_balancer.)
  • один или несколько модулей схем или протоколов прокси-сервера:
    Протокол Модуль
    AJP13 (протокол Apache JServe версии 1.3) mod_proxy_ajp
    CONNECT (для SSL) mod_proxy_connect
    FastCGI mod_proxy_fcgi
    ftp mod_proxy_ftp
    HTTP/0.9, HTTP/1.0 и HTTP/1.1 mod_proxy_http
    HTTP/2.0 mod_proxy_http2
    SCGI mod_proxy_scgi
    UWSGI mod_proxy_uwsgi
    WS и WSS (веб-сокеты) mod_proxy_wstunnel

Кроме того, другие модули обеспечивают расширенные возможности. Кэширование реализуется с помощью mod_cache и связанных модулей. Возможность подключения к удалённым серверам с использованием протокола SSL/TLS обеспечивается директивами SSLProxy* модуля mod_ssl. Чтобы воспользоваться этими возможностями, необходимо загрузить и настроить дополнительные модули.

Прямые прокси-серверы и обратные прокси-серверы/шлюзы

Apache HTTP Server можно настроить как прямой и обратный прокси-сервер (также называемый шлюзом).

Обычный прямой прокси-сервер — это промежуточный сервер между клиентом и исходным сервером. Чтобы получить содержимое с исходного сервера, клиент отправляет запрос прокси-серверу, указав исходный сервер в качестве цели. Затем прокси-сервер запрашивает содержимое у исходного сервера и возвращает его клиенту. Для доступа к другим сайтам клиент должен быть специально настроен на использование прямого прокси-сервера.

Типичный вариант использования прямого прокси-сервера — предоставление доступа в Интернет внутренним клиентам, доступ которых в противном случае ограничен межсетевым экраном. Прямой прокси-сервер также может использовать кэширование (обеспечиваемое mod_cache) для снижения нагрузки на сеть.

Прямой прокси-сервер включается с помощью директивы ProxyRequests. Поскольку прямые прокси-серверы позволяют клиентам получать через ваш сервер доступ к произвольным сайтам и скрывать своё истинное происхождение, перед включением прямого прокси-сервера необходимо обеспечить безопасность сервера, разрешив доступ к прокси только авторизованным клиентам.

Обратный прокси-сервер (или шлюз), напротив, выглядит для клиента как обычный веб-сервер. Специальная настройка клиента не требуется. Клиент отправляет обычные запросы к содержимому в пространстве имён обратного прокси-сервера. Затем обратный прокси-сервер решает, куда направить эти запросы, и возвращает содержимое так, как будто он сам является исходным сервером.

Типичный вариант использования обратного прокси-сервера — предоставление пользователям Интернета доступа к серверу, расположенному за межсетевым экраном. Обратные прокси-серверы также можно использовать для балансировки нагрузки между несколькими внутренними серверами или для кэширования данных более медленного внутреннего сервера. Кроме того, обратные прокси-серверы можно использовать просто для объединения нескольких серверов в одном пространстве URL-адресов.

Обратный прокси-сервер включается с помощью директивы ProxyPass или флага [P] директивы RewriteRule. Для настройки обратного прокси-сервера не требуется включать ProxyRequests.

Базовые примеры

Приведённые ниже примеры дают лишь самое общее представление и помогут вам начать работу. Ознакомьтесь с документацией по отдельным директивам.

Кроме того, если вы хотите включить кэширование, обратитесь к документации mod_cache.

Обратный прокси-сервер

ProxyPass "/foo" "http://foo.example.com/bar"
ProxyPassReverse "/foo" "http://foo.example.com/bar"

Прямой прокси-сервер

ProxyRequests On
ProxyVia On

<Proxy "*">
  Require host internal.example.com
</Proxy>

Обновление WebSocket (версия 2.4.47 и более поздние)

ProxyPass "/some/ws/capable/path/" "http://example.com/some/ws/capable/path/" upgrade=websocket

Доступ через обработчик

Вы также можете принудительно обработать запрос как запрос к обратному прокси-серверу, создав подходящую передачу обработчика. Пример конфигурации ниже направит все запросы к PHP-скриптам указанному серверу FastCGI с использованием обратного прокси-сервера:

Обратное проксирование PHP-скриптов

<FilesMatch "\.php$">
    # Unix sockets require 2.4.7 or later
    SetHandler  "proxy:unix:/path/to/app.sock|fcgi://localhost/"
</FilesMatch>

Эта возможность доступна в Apache HTTP Server 2.4.10 и более поздних версиях.

Рабочие процессы

Прокси-сервер управляет конфигурацией исходных серверов и параметрами их взаимодействия с помощью объектов, называемых рабочими процессами. Существуют два встроенных рабочих процесса: рабочий процесс прямого прокси-сервера по умолчанию и рабочий процесс обратного прокси-сервера по умолчанию. Дополнительные рабочие процессы можно настроить явно.

У двух рабочих процессов по умолчанию фиксированная конфигурация; они используются, если запрос не соответствует ни одному другому рабочему процессу. Они не используют HTTP Keep-Alive или повторное использование соединений. Вместо этого TCP-соединения с исходным сервером открываются и закрываются для каждого запроса.

Явно настроенные рабочие процессы идентифицируются по URL-адресу. Обычно их создают и настраивают с помощью ProxyPass или ProxyPassMatch при использовании обратного прокси-сервера:

ProxyPass "/example" "http://backend.example.com" connectiontimeout=5 timeout=30

Это создаст рабочий процесс, связанный с URL-адресом исходного сервера http://backend.example.com, который будет использовать заданные значения тайм-аута. При использовании прямого прокси-сервера рабочие процессы обычно определяются с помощью директивы ProxySet:

ProxySet "http://backend.example.com" connectiontimeout=5 timeout=30

или, в качестве альтернативы, с помощью Proxy и ProxySet:

<Proxy "http://backend.example.com">
  ProxySet connectiontimeout=5 timeout=30
</Proxy>

Явно настроенные рабочие процессы в прямом режиме используются нечасто, поскольку прямые прокси-серверы обычно взаимодействуют со множеством различных исходных серверов. Тем не менее создание явных рабочих процессов для некоторых исходных серверов может быть полезным, если они используются очень часто. Явно настроенные рабочие процессы сами по себе не имеют понятия прямого или обратного проксирования. Они реализуют общий принцип взаимодействия с исходными серверами. Рабочий процесс, созданный с помощью ProxyPass для использования в обратном прокси-сервере, также будет использоваться для запросов прямого прокси-сервера, если URL-адрес исходного сервера совпадает с URL-адресом рабочего процесса, и наоборот.

URL-адрес, идентифицирующий прямой рабочий процесс, — это URL-адрес его исходного сервера, включая указанные компоненты пути:

ProxyPass "/examples" "http://backend.example.com/examples"
ProxyPass "/docs" "http://backend.example.com/docs"

В этом примере определены два разных рабочих процесса, каждый из которых использует отдельный пул соединений и конфигурацию.

Совместное использование рабочих процессов

Совместное использование рабочих процессов происходит, если URL-адреса рабочих процессов перекрываются. Это случается, когда URL-адрес одного рабочего процесса является начальной подстрокой URL-адреса другого рабочего процесса, определённого позднее в файле конфигурации. В следующем примере

ProxyPass "/apps" "http://backend.example.com/" timeout=60
ProxyPass "/examples" "http://backend.example.com/examples" timeout=10

второй рабочий процесс фактически не создаётся. Вместо него используется первый рабочий процесс. Преимущество состоит в том, что имеется только один пул соединений, поэтому соединения повторно используются чаще. Обратите внимание: все атрибуты конфигурации, явно указанные для более позднего рабочего процесса, будут проигнорированы. Об этом будет записано предупреждение в журнал. В приведённом выше примере итоговое значение тайм-аута для URL-адреса /examples будет 60 вместо 10!

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

Явно настроенные рабочие процессы бывают двух типов: прямые рабочие процессы и рабочие процессы балансировщика (нагрузки). Они поддерживают множество важных атрибутов конфигурации, описанных ниже в директиве ProxyPass. Те же атрибуты также можно задавать с помощью ProxySet.

Набор параметров, доступных для прямого рабочего процесса, зависит от протокола, указанного в URL-адресе исходного сервера. Доступные протоколы включают ajp, fcgi, ftp, http и scgi.

Рабочие процессы балансировщика — это виртуальные рабочие процессы, которые используют прямые рабочие процессы, называемые участниками, для непосредственной обработки запросов. У каждого балансировщика может быть несколько участников. При обработке запроса он выбирает участника на основе настроенного алгоритма балансировки нагрузки.

Рабочий процесс балансировщика создаётся, если в его URL-адресе в качестве схемы протокола используется balancer. URL-адрес балансировщика однозначно идентифицирует рабочий процесс балансировщика. Участники добавляются в балансировщик с помощью BalancerMember.

Разрешение DNS-имён исходных доменов

Разрешение DNS-имени происходит при первом создании сокета для исходного домена. Если повторное использование соединений включено, каждый домен серверной части разрешается только один раз для каждого дочернего процесса, а результат кэшируется для всех последующих соединений до перезапуска дочернего процесса. Эту информацию следует учитывать при планировании задач обслуживания DNS, связанных с доменами серверной части. Дополнительные сведения о повторном использовании соединений см. также в параметрах ProxyPass.

Управление доступом к прокси-серверу

Вы можете управлять доступом к прокси-серверу с помощью блока управления <Proxy>, как показано в следующем примере:

<Proxy "*">
  Require ip 192.168.0
</Proxy>

Дополнительные сведения о директивах управления доступом см. в mod_authz_host.

Если вы используете прямой прокси-сервер (с помощью директивы ProxyRequests), крайне важно строго ограничить доступ. В противном случае любой клиент сможет использовать ваш сервер для доступа к произвольным узлам, скрывая свою личность. Это опасно как для вашей сети, так и для Интернета в целом. При использовании обратного прокси-сервера (с помощью директивы ProxyPass с ProxyRequests Off) контроль доступа менее важен, поскольку клиенты могут обращаться только к узлам, которые вы настроили специально.

См. также переменную среды Proxy-Chain-Auth.

Медленный запуск

Если используется директива ProxyBlock, IP-адреса имён узлов определяются и кэшируются во время запуска для последующей проверки совпадений. Это может занять несколько секунд (или больше) в зависимости от скорости разрешения имён узлов.

Прокси-сервер интрасети

Прокси-сервер Apache httpd, расположенный во внутренней сети, должен направлять внешние запросы через межсетевой экран компании (для этого настройте директиву ProxyRemote, чтобы перенаправлять соответствующую схему на прокси-сервер межсетевого экрана). Однако при обращении к ресурсам внутри интрасети он может подключаться к узлам в обход межсетевого экрана. Директива NoProxy позволяет указать, какие узлы принадлежат интрасети и к каким следует обращаться напрямую.

Пользователи интрасети часто опускают имя локального домена в WWW-запросах, запрашивая, таким образом, «http://somehost/» вместо http://somehost.example.com/. Некоторые коммерческие прокси-серверы позволяют им делать это и просто обслуживают запрос, подразумевая настроенный локальный домен. Если используется директива ProxyDomain и сервер настроен для работы в режиме прокси, Apache httpd может вернуть ответ перенаправления и отправить клиента на правильный полный адрес сервера. Это предпочтительный способ, поскольку тогда в файлах закладок пользователя будут указаны полные имена узлов.

Корректировка протокола

Если mod_proxy отправляет запросы исходному серверу, который некорректно реализует поддержку keepalive или HTTP/1.1, можно использовать две переменные среды, чтобы принудительно выполнять запрос с использованием HTTP/1.0 без keepalive. Они задаются с помощью директивы SetEnv.

Это примечания force-proxy-request-1.0 и proxy-nokeepalive.

<Location "/buggyappserver/">
  ProxyPass "http://buggyappserver:7001/foo/"
  SetEnv force-proxy-request-1.0 1
  SetEnv proxy-nokeepalive 1
</Location>

В версии 2.4.26 и более поздних переменную среды «no-proxy» можно задать, чтобы отключить обработку текущего запроса модулем mod_proxy. Эту переменную следует задавать с помощью SetEnvIf, поскольку SetEnv вычисляется недостаточно рано.

Тела запросов

Некоторые методы запроса, например POST, содержат тело запроса. Протокол HTTP требует, чтобы запросы с телом использовали либо передачу с фрагментированным кодированием, либо отправляли заголовок запроса Content-Length. При передаче таких запросов исходному серверу mod_proxy_http всегда пытается отправить Content-Length. Однако если тело запроса велико, а исходный запрос использовал фрагментированное кодирование, в запросе к серверу верхнего уровня также может использоваться фрагментированное кодирование. Вы можете управлять выбором с помощью переменных среды. Значение proxy-sendcl обеспечивает максимальную совместимость с серверами верхнего уровня, всегда отправляя Content-Length, а значение proxy-sendchunked минимизирует использование ресурсов за счёт фрагментированного кодирования.

В некоторых случаях серверу приходится временно сохранять тела запросов на диске, чтобы выполнить запрошенную обработку тел запросов. Например, такое сохранение происходит, если исходное тело было отправлено с фрагментированным кодированием (и имеет большой размер), но администратор запросил отправку запросов серверной части с Content-Length или в формате HTTP/1.0. Такое сохранение также может происходить, если у тела запроса уже есть заголовок Content-Length, но сервер настроен на фильтрацию входящих тел запросов.

Заголовки запросов обратного прокси-сервера

При работе в режиме обратного прокси-сервера (например, с использованием директивы ProxyPass) mod_proxy_http добавляет несколько заголовков запроса, чтобы передать информацию исходному серверу. Это следующие заголовки:

X-Forwarded-For
IP-адрес клиента.
X-Forwarded-Host
Исходное имя узла, запрошенное клиентом в заголовке HTTP-запроса Host.
X-Forwarded-Server
Имя узла прокси-сервера.

Будьте осторожны при использовании этих заголовков на исходном сервере, поскольку они могут содержать несколько значений, разделённых запятыми, если исходный запрос уже содержал один из этих заголовков. Например, вы можете использовать %{X-Forwarded-For}i в строке формата журнала исходного сервера, чтобы записывать исходный IP-адрес клиента, однако адресов может быть несколько, если запрос проходит через несколько прокси-серверов.

См. также директивы ProxyPreserveHost и ProxyVia, управляющие другими заголовками запроса.

Примечание. Если требуется указать пользовательские заголовки запроса, которые нужно добавить к пересылаемому запросу, используйте директиву RequestHeader.

Директива BalancerGrowth

Описание: Количество дополнительных балансировщиков, которые можно добавить после настройки
Синтаксис:
BalancerGrowth #
Значение по умолчанию:
BalancerGrowth 5
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy
Совместимость: BalancerGrowth доступна только в Apache HTTP Server 2.3.13 и более поздних версиях.

Эта директива позволяет увеличить число балансировщиков, доступных для виртуального хоста, сверх количества, заданного предварительной конфигурацией. Она действует только при наличии хотя бы одного предварительно настроенного балансировщика.

Директива BalancerInherit

Описание: Наследовать балансировщики/рабочие процессы ProxyPass из основного сервера
Синтаксис:
BalancerInherit On|Off
Значение по умолчанию:
BalancerInherit On
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy
Совместимость: BalancerInherit доступна только в Apache HTTP Server 2.4.5 и более поздних версиях.

Эта директива заставляет текущий сервер/виртуальный хост «наследовать» балансировщики и рабочие процессы ProxyPass, определённые в основном сервере. Это может привести к проблемам и непоследовательному поведению при использовании диспетчера балансировщика, поэтому эту директиву следует отключить, если используется данная функция.

Значение, заданное для глобального сервера, определяет значение по умолчанию для всех виртуальных хостов.

Директива BalancerMember

Описание: Добавить участника в группу балансировки нагрузки
Синтаксис:
BalancerMember [balancerurl] url [key=value [key=value ...]]
Контекст: каталог
Статус: Расширение
Модуль: mod_proxy
Совместимость: BalancerMember доступна только в Apache HTTP Server 2.2 и более поздних версиях.

Эта директива добавляет участника в группу балансировки нагрузки. Её можно использовать в директиве-контейнере <Proxy balancer://...>; она принимает любые параметры в виде пары «ключ-значение», доступные директивам ProxyPass.

Только для директив BalancerMember доступен ещё один параметр: loadfactor. Это коэффициент нагрузки участника — десятичное число от 1.0 (по умолчанию) до 100.0, задающее взвешенную нагрузку для соответствующего участника.

Параметр balancerurl нужен только вне директивы-контейнера <Proxy balancer://...>. Он соответствует URL-адресу балансировщика, определённого в директиве ProxyPass.

Компонент пути URL-адреса балансировщика в любой директиве-контейнере <Proxy balancer://...> игнорируется.

Как правило, завершающие косые черты следует удалять из URL-адреса BalancerMember.

Директива BalancerPersist

Описание: Сохранять изменения, внесённые диспетчером балансировщика, после перезапуска.
Синтаксис:
BalancerPersist On|Off
Значение по умолчанию:
BalancerPersist Off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy
Совместимость: BalancerPersist доступна только в Apache HTTP Server 2.4.4 и более поздних версиях.

Эта директива обеспечивает сохранение общей памяти, связанной с балансировщиками и их участниками, после перезапуска. Благодаря этому локальные изменения не теряются при обычном перезапуске или плавном переходе состояний.

Директива NoProxy

Описание: Узлы, домены или сети, к которым следует подключаться напрямую
Синтаксис:
NoProxy host [host] ...
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy

Эта директива полезна только для прокси-серверов Apache httpd во внутренних сетях. Директива NoProxy задаёт список подсетей, IP-адресов, узлов и/или доменов, разделённых пробелами. Запрос к узлу, совпадающему с одним или несколькими элементами списка, всегда обслуживается напрямую, без перенаправления на настроенный прокси-сервер(ы) ProxyRemote.

Пример

ProxyRemote  "*"  "http://firewall.example.com:81"
NoProxy         ".example.com" "192.168.112.0/21"

Аргументы host директивы NoProxy должны иметь один из следующих типов:

Домен

Домен — это частично квалифицированное доменное имя DNS с точкой в начале. Оно представляет список узлов, логически принадлежащих одному домену или зоне DNS (т. е. суффиксы имён узлов заканчиваются на Domain).

Примеры

.com .example.org.

Чтобы отличать Domain от имени узла (как синтаксически, так и семантически; у домена DNS также может быть запись A DNS!), Domain всегда указывается с точкой в начале.

Примечание

При сравнении доменных имён регистр не учитывается, а Domain всегда считается привязанным к корню дерева DNS; поэтому домены .ExAmple.com и .example.com. (обратите внимание на завершающую точку) считаются равными. Поскольку при сравнении доменов поиск в DNS не выполняется, оно гораздо эффективнее сравнения подсетей.

Подсеть

Подсеть — это частично квалифицированный интернет-адрес в числовом формате (четыре числа, разделённые точками), за которым может следовать косая черта и маска сети, указанная как число значащих битов в SubNet. Она используется для представления подсети узлов, доступных через общий сетевой интерфейс. Если маска явно не указана, предполагается, что пропущенные (или нулевые) завершающие цифры задают маску. (В этом случае ширина маски сети может быть кратна только 8 битам.) Примеры:

192.168 или 192.168.0.0
подсеть 192.168.0.0 с подразумеваемой маской сети, содержащей 16 допустимых битов (иногда записывается в виде маски 255.255.0.0)
192.168.112.0/21
подсеть 192.168.112.0/21 с маской сети, содержащей 21 допустимый бит (также записывается в виде 255.255.248.0)

В частном случае SubNet с 32 допустимыми битами эквивалентна IPAddr, а SubNet с нулём допустимых битов (например, 0.0.0.0/0) эквивалентна константе _Default_, соответствующей любому IP-адресу.

IP-адрес

IP-адрес — это полностью квалифицированный интернет-адрес в числовом формате (четыре числа, разделённые точками). Обычно этот адрес обозначает узел, но с ним не обязательно должно быть связано доменное имя DNS.

Пример

192.168.123.7

Примечание

Для IPAddr не требуется разрешение имени системой DNS, поэтому его использование может повысить эффективность работы Apache.

Имя узла

Имя узла — это полностью квалифицированное доменное имя DNS, которое можно разрешить в один или несколько IP-адресов с помощью службы доменных имён DNS. Оно представляет логический узел (в отличие от доменов, см. выше) и должно разрешаться как минимум в один IP-адрес (или, как это часто бывает, в список узлов с различными IP-адресами).

Примеры

prep.ai.example.edu
www.example.org

Примечание

Во многих случаях эффективнее указывать IP-адрес вместо имени узла, поскольку это позволяет избежать поиска в DNS. Разрешение имён в Apache httpd может занять значительное время, если соединение с сервером имён установлено через медленный канал PPP.

При сравнении имён узлов регистр не учитывается, а имя узла всегда считается привязанным к корню дерева DNS; поэтому узлы WWW.ExAmple.com и www.example.com. (обратите внимание на завершающую точку) считаются равными.

См. также

  • Проблемы DNS

Директива <Proxy>

Описание: Контейнер директив, применяемых к проксируемым ресурсам
Синтаксис:
<Proxy wildcard-url> ...</Proxy>
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy

Директивы, размещённые в секциях <Proxy>, применяются только к соответствующему проксируемому содержимому. Допускаются подстановочные знаки в стиле оболочки.

Например, следующая конфигурация разрешит доступ к содержимому через ваш прокси-сервер только узлам из yournetwork.example.com:

<Proxy "*">
  Require host yournetwork.example.com
</Proxy>

Следующий пример будет обрабатывать все файлы в каталоге foo узла example.com с помощью фильтра INCLUDES при передаче через прокси-сервер:

<Proxy "http://example.com/foo/*">
  SetOutputFilter INCLUDES
</Proxy>

Отличия от секции конфигурации Location

URL-адрес внутреннего сервера соответствует секции конфигурации, если он начинается со строки wildcard-url, даже если последний компонент пути в директиве совпадает только с началом URL-адреса внутреннего сервера. Например, <Proxy "http://example.com/foo"> соответствует всем адресам http://example.com/foo, http://example.com/foo/bar и http://example.com/foobar. Сопоставление конечного URL-адреса отличается от поведения секции <Location>, в которой для целей данного примечания считается, что последний компонент пути оканчивается косой чертой.

Дополнительные возможности управления сопоставлением см. в <ProxyMatch>.

См. также

  • <ProxyMatch>

Директива Proxy100Continue

Описание: Передавать ожидание 100-continue исходному серверу
Синтаксис:
Proxy100Continue Off|On
Значение по умолчанию:
Proxy100Continue On
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_proxy
Совместимость: Доступна начиная с версии 2.4.40

Эта директива определяет, должен ли прокси-сервер передавать ожидание 100-continue Expect: исходному серверу, позволяя ему решать, когда и следует ли читать тело HTTP-запроса, или, если Off, прокси-сервер должен самостоятельно сформировать промежуточный ответ 100 Continue перед передачей тела запроса.

Применимость

Этот параметр используется только для проксирования HTTP, реализуемого модулем mod_proxy_http.

Директива ProxyAddHeaders

Описание: Добавлять сведения о прокси-сервере в заголовки X-Forwarded-*
Синтаксис:
ProxyAddHeaders Off|On
Значение по умолчанию:
ProxyAddHeaders On
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_proxy
Совместимость: Доступна начиная с версии 2.3.10

Эта директива определяет, следует ли передавать сведения, связанные с прокси-сервером, серверу серверной части в HTTP-заголовках X-Forwarded-For, X-Forwarded-Host и X-Forwarded-Server.

Применимость

Этот параметр используется только для проксирования HTTP, реализуемого модулем mod_proxy_http.

Директива ProxyBadHeader

Описание: Определяет, как обрабатывать некорректные строки заголовков в ответе
Синтаксис:
ProxyBadHeader IsError|Ignore|StartBody
Значение по умолчанию:
ProxyBadHeader IsError
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy

Директива ProxyBadHeader определяет поведение mod_proxy при получении от исходного сервера синтаксически некорректных строк заголовков ответа (т. е. строк без двоеточия). Возможны следующие аргументы:

IsError
Прервать запрос и завершить его ответом 502 (Bad Gateway). Это поведение используется по умолчанию.
Ignore
Считать, что некорректные строки заголовков не были отправлены.
StartBody
При получении первой некорректной строки заголовка завершить чтение заголовков и считать оставшуюся часть телом ответа. Это помогает обойти ошибки серверов серверной части, которые забывают вставить пустую строку между заголовками и телом.

Директива ProxyBlock

Описание: Слова, узлы или домены, проксирование для которых запрещено
Синтаксис:
ProxyBlock *|word|host|domain [word|host|domain] ...
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy

Директива ProxyBlock задаёт список слов, узлов и/или доменов, разделённых пробелами. Запросы документов HTTP, HTTPS и FTP к сайтам, имена которых содержат совпавшие слова, узлы или домены, блокируются прокси-сервером. Модуль прокси также попытается определить IP-адреса элементов списка, которые могут быть именами узлов, во время запуска и закэшировать их для последующей проверки совпадений. Это может замедлить запуск сервера.

Пример

ProxyBlock "news.example.com" "auctions.example.com" "friends.example.com"

Обратите внимание, что для соответствия любому из этих сайтов достаточно было бы указать example.

Совпадение с узлами также будет найдено, если они указаны по IP-адресу.

Также обратите внимание, что

ProxyBlock "*"

блокирует подключения ко всем сайтам.

Директива ProxyDomain

Описание: Имя домена по умолчанию для проксируемых запросов
Синтаксис:
ProxyDomain Domain
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy

Эта директива полезна только для прокси-серверов Apache httpd во внутренних сетях. Директива ProxyDomain задаёт домен по умолчанию, к которому будет относиться прокси-сервер apache. Если встречается запрос к хосту без имени домена, будет сформирован ответ перенаправления на тот же хост с добавленным настроенным значением Domain.

Пример

ProxyRemote  "*"  "http://firewall.example.com:81"
NoProxy         ".example.com" "192.168.112.0/21"
ProxyDomain     ".example.com"

Директива ProxyErrorOverride

Описание: Переопределение страниц ошибок для проксируемого содержимого
Синтаксис:
ProxyErrorOverride Off|On [code ...]
По умолчанию:
ProxyErrorOverride Off
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_proxy
Совместимость: Список кодов состояния добавлен в версии 2.4.47

Эта директива полезна в конфигурациях обратного прокси, где требуется единообразное оформление страниц ошибок, отображаемых конечному пользователю. Она также позволяет включённым файлам (через SSI mod_include) получать код ошибки и действовать соответствующим образом. (При поведении по умолчанию отображается страница ошибки проксируемого сервера. При включении этой директивы отображается сообщение об ошибке SSI.)

Эта директива не влияет на обработку информационных ответов (1xx), обычных успешных ответов (2xx) и ответов перенаправления (3xx).

По умолчанию ProxyErrorOverride применяется ко всем ответам с кодами от 400 (включительно) до 600 (не включительно).

Пример поведения по умолчанию

ProxyErrorOverride  On

Чтобы изменить поведение по умолчанию, можно указать через пробел коды состояния, которые следует учитывать. В этом случае все остальные коды состояния будут игнорироваться. Можно указывать только коды состояния, считающиеся кодами ошибок: от 400 (включительно) до 600 (не включительно).

Пример с пользовательскими кодами состояния

ProxyErrorOverride  On 403 405 500 501 502 503 504

Директива ProxyIOBufferSize

Описание: Определение размера внутреннего буфера пропускной способности данных
Синтаксис:
ProxyIOBufferSize bytes
По умолчанию:
ProxyIOBufferSize 8192
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy

Директива ProxyIOBufferSize изменяет размер внутреннего буфера, используемого для временного хранения данных между вводом и выводом. Размер должен быть не менее 512.

Почти во всех случаях менять это значение не требуется.

При использовании с AJP эта директива задаёт максимальный размер пакета AJP в байтах. Значения больше 65536 устанавливаются равными 65536. Если изменить значение по сравнению со значением по умолчанию, необходимо также изменить атрибут packetSize коннектора AJP на стороне Tomcat! Атрибут packetSize доступен только в Tomcat 5.5.20+ и 6.0.2+

Обычно изменять максимальный размер пакета не требуется. О проблемах со значением по умолчанию сообщалось при отправке сертификатов или цепочек сертификатов.

Директива <ProxyMatch>

Описание: Контейнер для директив, применяемых к проксируемым ресурсам, соответствующим регулярному выражению
Синтаксис:
<ProxyMatch regex> ...</ProxyMatch>
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy

Директива <ProxyMatch> идентична директиве <Proxy>, за исключением того, что она сопоставляет URL с помощью регулярных выражений.

Начиная с версии 2.4.8 именованные группы и обратные ссылки захватываются и записываются в окружение с соответствующим именем, которому предшествует префикс "MATCH_", а само имя приводится к верхнему регистру. Это позволяет ссылаться на части URL из выражений и таких модулей, как mod_rewrite. Чтобы избежать путаницы, нумерованные (безымянные) обратные ссылки игнорируются. Вместо них используйте именованные группы.

<ProxyMatch "^http://(?<sitename>[^/]+)">
    Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
</ProxyMatch>

См. также

  • <Proxy>

Директива ProxyMaxForwards

Описание: Максимальное число прокси-серверов, через которые может быть перенаправлен запрос
Синтаксис:
ProxyMaxForwards number
По умолчанию:
ProxyMaxForwards -1
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy
Совместимость: Поведение по умолчанию изменено в версии 2.2.7

Директива ProxyMaxForwards задаёт максимальное число прокси-серверов, через которые может пройти запрос, если в запросе не передан заголовок Max-Forwards. Это значение можно установить, чтобы предотвратить бесконечные циклы проксирования или DoS-атаку.

Пример

ProxyMaxForwards 15

Обратите внимание, что установка значения ProxyMaxForwards нарушает протокол HTTP/1.1 (RFC2616), запрещающий прокси устанавливать Max-Forwards, если клиент его не установил. Более ранние версии Apache httpd всегда устанавливали его. Отрицательное значение ProxyMaxForwards, включая значение по умолчанию -1, обеспечивает соответствие протоколу, но может оставить возможность возникновения циклов.

Директива ProxyPass

Описание: Отображает удалённые серверы в пространстве URL-адресов локального сервера
Синтаксис:
ProxyPass [path] !|url [key=value [key=value ...]] [nocanon] [interpolate] [noquery]
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_proxy
Совместимость: Поддержка сокетов домена Unix (UDS) добавлена в версии 2.4.7

Эта директива позволяет отображать удалённые серверы в пространстве локального сервера. Локальный сервер не действует как прокси в обычном смысле, а выглядит как зеркало удалённого сервера. Локальный сервер часто называют обратным прокси или шлюзом. path — это имя локального виртуального пути; url — частичный URL удалённого сервера, который не может содержать строку запроса.

Прежде чем продолжить изучение этого раздела, настоятельно рекомендуется ознакомиться с концепцией рабочего процесса.
Эта директива не поддерживается в контейнерах <Directory>, <If> и <Files>.
При использовании ProxyPass директива ProxyRequests обычно должна быть установлена в значение off.

Начиная с версии 2.4.7, доступна поддержка сокетов домена Unix: для этого используется целевой адрес с префиксом unix:/path/lis.sock|. Например, чтобы проксировать HTTP-запросы и направлять их в UDS по адресу /home/www.socket, следует использовать unix:/home/www.socket|http://localhost/whatever/.

Примечание: Путь, связанный с URL unix:, учитывает DefaultRuntimeDir.

При использовании внутри секции <Location> первый аргумент опускается, а локальный каталог определяется из <Location>. То же произойдёт внутри секции <LocationMatch>; однако ProxyPass не интерпретирует регулярное выражение как таковое, поэтому в этом случае необходимо использовать ProxyPassMatch.

Предположим, что адрес локального сервера — http://example.com/; тогда

<Location "/mirror/foo/">
    ProxyPass "http://backend.example.com/"
</Location>

локальный запрос к http://example.com/mirror/foo/bar будет внутренне преобразован в прокси-запрос к http://backend.example.com/bar.

Если требуется более гибкая конфигурация обратного прокси, см. директиву RewriteRule с флагом [P].

Возможен следующий альтернативный синтаксис; однако при большом количестве таких записей он может снизить производительность. Преимущество приведённого ниже синтаксиса заключается в том, что он позволяет динамически управлять настройками через интерфейс менеджера балансировщика:

ProxyPass "/mirror/foo/" "http://backend.example.com/"

Если первый аргумент оканчивается косой чертой /, второй аргумент также должен оканчиваться косой чертой /, и наоборот. В противном случае в результирующих запросах к серверу приложений могут отсутствовать необходимые косые черты, и результат будет не таким, как ожидалось.

Директива ! полезна в ситуациях, когда не нужно проксировать подкаталог, например:

<Location "/mirror/foo/">
    ProxyPass "http://backend.example.com/"
</Location>
<Location "/mirror/foo/i">
    ProxyPass "!"
</Location>
ProxyPass "/mirror/foo/i" "!"
ProxyPass "/mirror/foo" "http://backend.example.com"

будет проксировать все запросы к /mirror/foo на backend.example.com, кроме запросов к /mirror/foo/i.

Сочетание настроек ProxyPass в разных контекстах не работает:

ProxyPass "/mirror/foo/i" "!"
<Location "/mirror/foo/">
    ProxyPass "http://backend.example.com/"
</Location>

В этом случае запрос к /mirror/foo/i будет проксирован, поскольку директива ProxyPass в блоке Location обрабатывается первой. Тот факт, что ProxyPass поддерживает как контексты сервера, так и контексты каталогов, не означает, что область действия и положение в файле конфигурации гарантируют порядок обработки или переопределение.

Порядок директив ProxyPass

Настроенные правила ProxyPass и ProxyPassMatch проверяются в порядке их следования в конфигурации. Побеждает первое совпавшее правило. Поэтому обычно следует сортировать конфликтующие правила ProxyPass, начиная с URL наибольшей длины. Иначе более поздние правила для длинных URL будут перекрыты любым предыдущим правилом, использующим начальную часть URL. Обратите внимание, что это связано с совместным использованием рабочих процессов.

Порядок директив ProxyPass в секциях Location

В блоке Location можно разместить только одну директиву ProxyPass, при этом приоритет будет у наиболее конкретного расположения.

Исключения и переменная окружения no-proxy

Исключения должны располагаться перед общими директивами ProxyPass. Начиная с версии 2.4.26, переменная окружения «no-proxy» является альтернативой исключениям и представляет собой единственный способ настроить исключение для директивы ProxyPass в контексте Location. Эту переменную следует задавать с помощью SetEnvIf, поскольку SetEnv обрабатывается недостаточно рано.

Параметры ProxyPass key=value

Начиная с Apache HTTP Server 2.1, mod_proxy поддерживает пулы соединений с сервером приложений. Созданные по запросу соединения могут сохраняться в пуле для дальнейшего использования. Ограничения на размер пула и другие параметры можно задать в директиве ProxyPass с помощью параметров key=value, описанных в таблицах ниже.

Максимальное количество соединений с сервером приложений

По умолчанию mod_proxy разрешает и сохраняет максимальное количество соединений, которые могут одновременно использоваться дочерним процессом веб-сервера. Чтобы уменьшить значение по умолчанию, используйте параметр max. Пул соединений поддерживается отдельно для каждого дочернего процесса веб-сервера; параметры max и другие настройки не согласуются между всеми дочерними процессами, кроме случаев, когда конфигурация или архитектура MPM допускает только один дочерний процесс.

Используйте параметр ttl, чтобы задать необязательное время жизни: соединения, которые не использовались не менее ttl секунд, будут закрыты. ttl можно использовать, чтобы избежать повторного использования соединения, которое может закрыться из-за тайм-аута keep-alive сервера приложений.

Пример

ProxyPass "/example" "http://backend.example.com" max=20 ttl=120 retry=300
Параметры Worker|BalancerMember
Параметр По умолчанию Описание
min 0 Минимальное количество записей в пуле соединений, не связанное с фактическим количеством соединений. Изменять значение по умолчанию нужно только в особых случаях, когда память кучи, связанная с соединениями с сервером приложений, должна быть выделена заранее или сохранена.
max 1...n Максимальное количество соединений с сервером приложений. По умолчанию предел равен количеству потоков на процесс в активном MPM. В MPM Prefork он всегда равен 1, а в других MPM определяется директивой ThreadsPerChild.
smax max Записи пула соединений сверх этого предела освобождаются во время определённых операций, если они не использовались дольше времени жизни, заданного параметром ttl. Если с записью пула соединений связано соединение, оно будет закрыто. Изменять значение по умолчанию нужно только в особых случаях, когда записи пула соединений и связанные с ними соединения, срок жизни которых истёк, требуется освобождать или закрывать быстрее.
acquire - Если задан, параметр определяет максимальное время ожидания свободного соединения в пуле в миллисекундах. Если свободных соединений в пуле нет, Apache httpd вернёт клиенту статус SERVER_BUSY.
connectiontimeout timeout Тайм-аут подключения в секундах. Количество секунд, в течение которых Apache httpd ожидает установления соединения с сервером приложений. Если добавить суффикс ms, тайм-аут можно задать в миллисекундах.
disablereuse Off Этот параметр следует использовать, если нужно заставить mod_proxy немедленно закрывать соединение с сервером приложений после его использования и тем самым отключить для этого сервера постоянное соединение и пул соединений. Это помогает в различных ситуациях, например когда межсетевой экран между Apache httpd и сервером приложений (независимо от протокола) молча разрывает соединения или когда серверы приложений используют DNS с циклическим распределением запросов. Если повторное использование соединений включено, домен каждого сервера приложений разрешается (посредством DNS-запроса) только один раз для каждого дочернего процесса, а результат кэшируется для всех последующих соединений до перезапуска дочернего процесса. Чтобы отключить повторное использование соединений, задайте для этого свойства значение On.
enablereuse On Этот параметр является противоположностью описанного выше параметра «disablereuse» и предназначен для удобства обработчиков схем, которым требуется явно включать повторное использование соединений (например, mod_proxy_fcgi). Доступен только в версии 2.4.11 и более поздних.
flushpackets off Определяет, будет ли модуль прокси автоматически сбрасывать выходной пакет данных после каждого фрагмента данных. Значение «off» означает, что сброс выполняется только при необходимости; «on» — после отправки каждого фрагмента; «auto» — ожидать в течение заданного времени и выполнять сброс, если за «flushwait» миллисекунд не поступили входные данные. В настоящее время этот параметр действует только для mod_proxy_ajp и mod_proxy_fcgi.
flushwait 10 Время ожидания дополнительных входных данных в миллисекундах перед сбросом выходного пакета данных, если для «flushpackets» задано значение «auto».
iobuffersize 8192 Настраивает размер внутреннего буфера ввода-вывода. Это позволяет переопределить ProxyIOBufferSize для определённого рабочего процесса. Значение должно быть не меньше 512 или равняться 0, чтобы использовать системное значение по умолчанию — 8192.
responsefieldsize 8192 Настраивает размер буфера полей ответа прокси. Размер буфера должен быть не меньше размера самого большого ожидаемого заголовка проксируемого ответа. Если задать значение 0, будет использоваться системное значение по умолчанию — 8192 байта.
Доступен в Apache HTTP Server 2.4.34 и более поздних версиях.
keepalive Off

Этот параметр следует использовать, если между Apache httpd и сервером приложений установлен межсетевой экран, который обычно разрывает неактивные соединения. Этот флаг указывает операционной системе отправлять сообщения KEEP_ALIVE по неактивным соединениям и тем самым предотвращать разрыв соединения межсетевым экраном. Чтобы включить keep-alive, задайте для этого свойства значение On.

Частота отправки начальных и последующих проб TCP keep-alive зависит от глобальных настроек операционной системы и может достигать двух часов. Чтобы этот механизм был полезен, заданная в ОС частота должна быть меньше порогового значения, используемого межсетевым экраном.

lbset 0 Задаёт набор кластера балансировщика нагрузки, членом которого является рабочий процесс. Балансировщик нагрузки проверяет все элементы набора lbset с меньшим номером, прежде чем перейти к наборам с большими номерами.
ping 0 Параметр ping указывает веб-серверу проверить соединение с сервером приложений перед перенаправлением запроса. Для AJP он заставляет mod_proxy_ajp отправлять запрос CPING через соединение ajp13 (реализовано в Tomcat 3.3.2+, 4.1.28+ и 5.0.13+). Для HTTP он заставляет mod_proxy_http отправлять серверу приложений запрос 100-Continue (применимо только к HTTP/1.1; для серверов приложений, не поддерживающих HTTP/1.1, этот параметр не действует). В обоих случаях параметр задаёт время ожидания ответа в секундах. Эта функция добавлена для решения проблем с зависшими и перегруженными серверами приложений. Она увеличивает сетевой трафик при нормальной работе, что может быть нежелательно, но снижает его, если некоторые узлы кластера отключены или перегружены. Если добавить суффикс ms, задержку можно задать в миллисекундах.
receivebuffersize 0 Настраивает размер явного сетевого буфера (TCP/IP) для проксируемых соединений. Это позволяет переопределить ProxyReceiveBufferSize для определённого рабочего процесса. Значение должно быть не меньше 512 или равняться 0, чтобы использовать системное значение по умолчанию.
redirect - Маршрут перенаправления рабочего процесса. Это значение обычно задаётся динамически, чтобы обеспечить безопасное удаление узла из кластера. Если значение задано, все запросы без идентификатора сеанса будут перенаправлены к BalancerMember, параметр route которого совпадает с этим значением.
retry 60 Тайм-аут повторной попытки для рабочего процесса пула соединений в секундах. Если рабочий процесс пула соединений с сервером приложений находится в состоянии ошибки, Apache httpd не будет перенаправлять запросы на этот сервер до истечения тайм-аута. Это позволяет остановить сервер приложений для обслуживания и позднее снова запустить его. Значение 0 означает, что повторные попытки для рабочих процессов в состоянии ошибки выполняются всегда, без тайм-аута.
route - Маршрут рабочего процесса при использовании в балансировщике нагрузки. Маршрут — это значение, добавляемое к идентификатору сеанса.
status - Однобуквенное значение, определяющее начальный статус этого рабочего процесса.
D: рабочий процесс отключён и не будет принимать запросы.
S: рабочий процесс административно остановлен.
I: рабочий процесс работает в режиме игнорирования ошибок и всегда считается доступным.
R: рабочий процесс является горячим резервом. Для каждого непригодного к работе рабочего процесса в данном наборе lbset (выводимого из эксплуатации, остановленного, находящегося в состоянии ошибки и т. д.) вместо него будет использоваться пригодный к работе горячий резерв с тем же набором lbset. Горячие резервы помогают обеспечить постоянную доступность заданного количества рабочих процессов для балансировщика.
H: рабочий процесс находится в режиме горячего ожидания и будет использоваться, только если в наборе балансировщика нет других работоспособных рабочих процессов или резервов.
E: рабочий процесс находится в состоянии ошибки.
N: рабочий процесс находится в режиме вывода из эксплуатации и будет принимать только существующие закреплённые сеансы, предназначенные для него, игнорируя все остальные запросы.
Статус можно установить (это поведение по умолчанию), добавив перед ним «+», или сбросить, добавив «-». Таким образом, значение «S-E» останавливает этот рабочий процесс и сбрасывает флаг ошибки.
timeout ProxyTimeout Тайм-аут сокета в секундах. Количество секунд, в течение которых Apache httpd ожидает получения данных от сервера приложений или их отправки на него.
ttl - Время жизни неактивных соединений и соответствующих записей пула соединений в секундах. По достижении этого предела соединение больше не используется; через некоторое время оно будет закрыто.
flusher flush

Имя поставщика, используемого mod_proxy_fdpass. Дополнительные сведения см. в документации этого модуля.

secret - Значение секрета, используемого mod_proxy_ajp. Оно должно совпадать с секретом, настроенным на стороне сервера для соединения AJP.
Доступен в Apache HTTP Server 2.4.42 и более поздних версиях.
upgrade -

Протокол, принимаемый mod_proxy_http или mod_proxy_wstunnel для механизма HTTP Upgrade по согласованию с HTTP-клиентом/браузером (согласно RFC 9110 — Upgrade). См. примечание «Обновление протокола» ниже.

mapping -

Тип сопоставления между path и url. Он определяет нормализацию и/или декодирование (либо его отсутствие), которые mod_proxy применит к запрошенному uri-path перед сопоставлением с path. При совпадении сопоставление применяется к uri-path, благодаря чему все контексты каталогов, использующие путь (например, <Location>), будут сопоставляться с использованием того же правила.

mapping=encoded предотвращает %-декодирование uri-path, что позволяет использовать, например, такие конфигурации:

ProxyPass "/special%3Fsegment" "https://example.com/special%3Fsegment" mapping=encoded
<Location "/special%3Fsegment">
  Require ip 172.17.2.0/24
</Location>

mapping=servlet относится к нормализации, определённой спецификацией Servlet и, например, применяемой Apache Tomcat для контейнеров сервлетов (в частности, параметры пути при сопоставлении игнорируются). Тогда путь uri-path, например /some;foo/path, сопоставляется как /some/path и, следовательно, совпадает с любым из приведённых ниже вариантов независимо от параметров запрошенного пути:

ProxyPass "/some/path" "https://servlet.example.com/some/path" mapping=servlet
<Location "/some/path">
  Require valid-user
</Location>

Примечание

Рекомендуется использовать на стороне Apache httpd то же правило сопоставления, что и на стороне сервера приложений. Например, при настройке авторизации в блоках <Location> для путей, которые mod_proxy сопоставляет с некоторыми контейнерами сервлетов (например, с приложениями, работающими на Apache Tomcat), следует использовать настройку mapping=servlet, чтобы параметры пути и подобные им элементы не мешали проверке авторизации, выполняемой Apache httpd.

addressttl -1

Время жизни в секундах, в течение которого кэшируются результаты DNS-разрешения адреса сервера приложений. Значение -1 означает, что они хранятся до перезапуска Apache httpd.

Если схема директивы Proxy начинается с balancer:// (например, balancer://cluster; информация о пути игнорируется), будет создан виртуальный рабочий процесс, который фактически не взаимодействует с сервером приложений. Вместо этого он отвечает за управление несколькими «реальными» рабочими процессами. В этом случае для виртуального рабочего процесса можно задать специальный набор параметров. Дополнительные сведения о работе балансировщика см. в mod_proxy_balancer.

Параметры балансировщика
Параметр По умолчанию Описание
lbmethod byrequests Метод балансировки нагрузки. Выберите используемый алгоритм планирования балансировки нагрузки. Можно указать byrequests для взвешенного подсчёта запросов; bytraffic для балансировки по взвешенному количеству байтов трафика; или bybusyness для балансировки по количеству ожидающих запросов. По умолчанию используется byrequests.
maxattempts На единицу меньше количества рабочих процессов или 1, если рабочий процесс только один. Максимальное количество попыток переключения на резервный сервер до прекращения попыток.
nofailover Off Если задано значение On, сеанс будет прерван, если рабочий процесс находится в состоянии ошибки или отключён. Задайте значение On, если серверы приложений не поддерживают репликацию сеансов.
stickysession - Имя закреплённого сеанса балансировщика. Обычно задаётся значение вроде JSESSIONID или PHPSESSIONID в зависимости от сервера приложений, поддерживающего сеансы. Если сервер приложений использует разные имена для файлов cookie и идентификатора в URL-кодировке (как контейнеры сервлетов), используйте символ | для их разделения. Первая часть соответствует файлу cookie, вторая — пути.
Доступен в Apache HTTP Server 2.4.4 и более поздних версиях.
stickysessionsep "." Задаёт разделитель в файле cookie сеанса. Некоторые серверы приложений используют символ, отличный от «.». Например, сервер Oracle Weblogic использует «!». Правильный символ можно задать с помощью этого параметра. Значение «Off» означает, что разделитель не используется.
scolonpathdelim Off Если задано значение On, точка с запятой «;» будет использоваться как дополнительный разделитель пути закреплённого сеанса. В основном это нужно для эмуляции поведения mod_jk при обработке путей вроде JSESSIONID=6736bcf34;foo=aabfa
timeout 0 Тайм-аут балансировщика в секундах. Если задан, он определяет максимальное время ожидания свободного рабочего процесса. По умолчанию ожидание не выполняется.
failonstatus - Один или несколько разделённых запятыми кодов состояния HTTP. Если задать этот параметр, рабочий процесс будет переведён в состояние ошибки при получении сервером приложений любого кода из списка. Восстановление рабочего процесса выполняется так же, как при других ошибках рабочего процесса.
failontimeout Off Если параметр включён, тайм-аут чтения ввода-вывода после отправки запроса серверу приложений переведёт рабочий процесс в состояние ошибки. Восстановление рабочего процесса выполняется так же, как при других ошибках рабочего процесса.
Доступен в Apache HTTP Server 2.4.5 и более поздних версиях.
nonce <auto> Защитный nonce, используемый на странице приложения balancer-manager. По умолчанию автоматически определяется nonce на основе UUID для дополнительной защиты страницы. Если задано значение, nonce устанавливается равным ему. Значение None отключает все проверки nonce.

Примечание

Помимо nonce, страницу balancer-manager следует защитить с помощью ACL.

growth 0 Количество дополнительных BalancerMember, которые можно добавить к этому балансировщику сверх количества, заданного в конфигурации.
forcerecovery On Принудительно восстанавливает все рабочие процессы немедленно, не учитывая параметр retry, если все рабочие процессы балансировщика находятся в состоянии ошибки. В некоторых случаях принудительное восстановление всех рабочих процессов без учёта параметра retry каждого из них может ещё сильнее перегрузить уже перегруженный сервер приложений. В таком случае задайте значение Off.
Доступен в Apache HTTP Server 2.4.2 и более поздних версиях.

Пример настройки балансировщика:

ProxyPass "/special-area" "http://special.example.com" smax=5 max=10
ProxyPass "/" "balancer://mycluster/" stickysession=JSESSIONID|jsessionid nofailover=On
<Proxy "balancer://mycluster">
    BalancerMember "ajp://1.2.3.4:8009"
    BalancerMember "ajp://1.2.3.5:8009" loadfactor=20
    # Less powerful server, don't send as many requests there,
    BalancerMember "ajp://1.2.3.6:8009" loadfactor=5
</Proxy>

Настройка горячих резервов помогает обеспечить постоянную доступность заданного количества рабочих процессов для каждого набора балансировщика нагрузки:

ProxyPass "/" "balancer://sparecluster/"
<Proxy balancer://sparecluster>
    BalancerMember ajp://1.2.3.4:8009
    BalancerMember ajp://1.2.3.5:8009
    # The servers below are hot spares. For each server above that is unusable
    # (draining, stopped, unreachable, in error state, etc.), one of these spares
    # will be used in its place. Two servers will always be available for a request
    # unless one or more of the spares is also unusable.
    BalancerMember ajp://1.2.3.6:8009 status=+R
    BalancerMember ajp://1.2.3.7:8009 status=+R
</Proxy>

Настройка горячего резерва, который будет использоваться, только если в наборе балансировщика нагрузки нет других доступных элементов или резервов:

ProxyPass "/" "balancer://hotcluster/"
<Proxy "balancer://hotcluster">
    BalancerMember "ajp://1.2.3.4:8009" loadfactor=1
    BalancerMember "ajp://1.2.3.5:8009" loadfactor=2.25
    # The server below is on hot standby
    BalancerMember "ajp://1.2.3.6:8009" status=+H
    ProxySet lbmethod=bytraffic
</Proxy>

Дополнительные ключевые слова ProxyPass

Обычно mod_proxy приводит URL-адреса ProxyPass к каноническому виду. Однако это может быть несовместимо с некоторыми серверами приложений, особенно использующими PATH_INFO. Необязательное ключевое слово nocanon отключает это преобразование и передаёт путь URL серверу приложений в исходном виде. Обратите внимание, что это ключевое слово может повлиять на безопасность сервера приложений, поскольку оно отключает обычную ограниченную защиту прокси от атак через URL.

Обычно mod_proxy включает строку запроса при формировании переменной окружения SCRIPT_FILENAME. Необязательное ключевое слово noquery (доступно начиная с httpd 2.4.1) предотвращает это.

Необязательное ключевое слово interpolate в сочетании с ProxyPassInterpolateEnv заставляет ProxyPass подставлять значения переменных окружения, используя синтаксис ${VARNAME}. Обратите внимание, что многие стандартные переменные окружения, происходящие из CGI, в момент такой подстановки ещё не существуют, поэтому для сложных правил может по-прежнему понадобиться mod_rewrite. Кроме того, подстановка в части URL со схемой/именем хоста/портом поддерживается только для переменных, доступных при разборе директивы (например, Define). Динамически определять эти поля можно с помощью mod_rewrite. В следующем примере показано, как использовать mod_rewrite для динамического выбора схемы http или https:

RewriteEngine On

RewriteCond "%{HTTPS}" =off
RewriteRule "." "-" [E=protocol:http]
RewriteCond "%{HTTPS}" =on
RewriteRule "." "-" [E=protocol:https]

RewriteRule "^/mirror/foo/(.*)" "%{ENV:protocol}://backend.example.com/$1" [P]
ProxyPassReverse  "/mirror/foo/" "http://backend.example.com/"
ProxyPassReverse  "/mirror/foo/" "https://backend.example.com/"

Обновление протокола

Начиная с Apache HTTP Server 2.4.47, обновление протокола (туннелирование) может обрабатываться сквозным образом модулем mod_proxy_http с помощью параметра ProxyPass upgrade.

Сквозная обработка означает, что запрос HTTP Upgrade от клиента/браузера сначала передаётся серверу источника модулем mod_proxy_http, а соединение обновляется (и туннелируется модулем mod_proxy_http) только в том случае, если сервер источника принимает или инициирует обновление (ответ HTTP 101 Switching Protocols). Если сервер источника возвращает что-либо другое, mod_proxy_http продолжит обычную передачу данных по протоколу HTTP и обеспечит его соблюдение для этого соединения.

Пример конфигурации с использованием mod_proxy_http см. в разделе «Обновление WebSocket (версия 2.4.47 и более поздние)».

О том, как проксировать протокол WebSocket в Apache HTTP Server 2.4.46 и более ранних версиях (или если ProxyWebsocketFallbackToProxyHttp из версии 2.4.48 и более поздних отключает обработку mod_proxy_http), см. документацию mod_proxy_wstunnel.

Директива ProxyPassInherit

Описание: Наследование директив ProxyPass, заданных для основного сервера
Синтаксис:
ProxyPassInherit On|Off
Значение по умолчанию:
ProxyPassInherit On
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy
Совместимость: ProxyPassInherit доступна только в Apache HTTP Server 2.4.5 и более поздних версиях.

Эта директива заставляет текущий сервер или виртуальный хост «наследовать» директивы ProxyPass, заданные для основного сервера. Это может привести к проблемам и непоследовательному поведению при использовании менеджера балансировщика для динамического изменения настроек, поэтому эту возможность следует отключить, если используется такая функция.

Настройка глобального сервера определяет значение по умолчанию для всех виртуальных хостов.

Отключение ProxyPassInherit также отключает BalancerInherit.

Директива ProxyPassInterpolateEnv

Описание: Включение подстановки переменных окружения в конфигурациях обратного прокси
Синтаксис:
ProxyPassInterpolateEnv On|Off
Значение по умолчанию:
ProxyPassInterpolateEnv Off
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_proxy
Совместимость: Доступна начиная с httpd 2.2.9

Эта директива вместе с аргументом interpolate для директив ProxyPass, ProxyPassReverse, ProxyPassReverseCookieDomain и ProxyPassReverseCookiePath позволяет динамически настраивать обратные прокси с помощью переменных окружения, которые могут задаваться другим модулем, например mod_rewrite. Она влияет на директивы ProxyPass, ProxyPassReverse, ProxyPassReverseCookieDomain и ProxyPassReverseCookiePath и заставляет их подставлять значение переменной окружения varname вместо строки ${varname} в директивах конфигурации, если задан параметр interpolate.

Часть ProxyPass, содержащая схему/имя хоста/порт, может включать переменные, но только те, которые доступны при разборе директивы (например, с помощью Define). Во всех остальных случаях рекомендуется использовать mod_rewrite.

Предупреждение о производительности

Оставляйте эту настройку отключённой, если она вам не нужна! Например, добавление переменных в ProxyPass может привести к использованию рабочих процессов mod_proxy по умолчанию (без возможности тонкой настройки, например повторного использования соединений и т. д.).

Директива ProxyPassMatch

Описание: Отображает удалённые серверы в пространстве URL-адресов локального сервера с помощью регулярных выражений
Синтаксис:
ProxyPassMatch [regex] !|url [key=value [key=value ...]]
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_proxy
Совместимость: Начиная с версии 2.4.47 параметры key=value учитываются, если параметр url содержит обратные ссылки (см. примечание ниже).

Эта директива эквивалентна ProxyPass, но использует регулярные выражения вместо простого сопоставления префиксов. Указанное регулярное выражение сопоставляется с url; если совпадение найдено, сервер подставляет все совпадения в круглых скобках в указанную строку и использует её как новый url.

Примечание: Эту директиву нельзя использовать в контексте <Directory>.

Предположим, что адрес локального сервера — http://example.com/; тогда

ProxyPassMatch "^/(.*\.gif)$" "http://backend.example.com/$1"

локальный запрос к http://example.com/foo/bar.gif будет внутренне преобразован в прокси-запрос к http://backend.example.com/foo/bar.gif.

Директива ! полезна в ситуациях, когда не требуется проксировать подкаталог в обратном направлении.

При использовании внутри секции <LocationMatch> первый аргумент опускается, а регулярное выражение берётся из <LocationMatch>.

Если требуется более гибкая конфигурация обратного прокси, см. директиву RewriteRule с флагом [P].

Подстановка по умолчанию

Если параметр URL не использует обратные ссылки на регулярное выражение, исходный URL будет добавлен к параметру URL.

Параметры key=value и url с обратными ссылками

Начиная с Apache HTTP Server 2.4.47, параметры key=value больше не игнорируются в ProxyPassMatch, где используется url с обратными ссылками. Однако для сохранения прежнего поведения при повторном использовании/поддержании постоянных соединений с сервером backend (ранее эти URL не использовали соединения повторно) в этом случае для параметра enablereuse (или disablereuse) по умолчанию задаётся значение off (соответственно on). Явная установка enablereuse=on позволяет повторно использовать соединения, если только некоторые обратные ссылки не относятся к части authority (url, содержащей имя хоста и/или порт) (это условие применяется начиная с Apache HTTP Server 2.4.55 и вызывает предупреждение при запуске, поскольку такие URL сами по себе не допускают повторного использования).

Предупреждение о безопасности

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

Директива ProxyPassReverse

Описание: Корректирует URL в заголовках HTTP-ответов, отправленных сервером, проксируемым в обратном направлении
Синтаксис:
ProxyPassReverse [path] url [interpolate]
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_proxy

Эта директива позволяет Apache httpd корректировать URL в заголовках Location, Content-Location и URI ответов HTTP-перенаправления. Это необходимо, когда Apache httpd используется в качестве обратного прокси (или шлюза), чтобы избежать обхода обратного прокси из-за HTTP-перенаправлений серверов backend, расположенных за ним.

Перезаписываются только указанные выше заголовки HTTP-ответов. Apache httpd не перезаписывает другие заголовки ответа и по умолчанию не изменяет ссылки на URL внутри HTML-страниц. Это означает, что абсолютные ссылки на URL в проксируемом содержимом будут обходить прокси. Чтобы изменить HTML-содержимое и привести его в соответствие с прокси, необходимо загрузить и включить mod_proxy_html.

path — имя локального виртуального пути; url — частичный URL удалённого сервера. Эти параметры используются так же, как и в директиве ProxyPass.

Например, предположим, что адрес локального сервера — http://example.com/; тогда

ProxyPass         "/mirror/foo/" "http://backend.example.com/"
ProxyPassReverse  "/mirror/foo/" "http://backend.example.com/"
ProxyPassReverseCookieDomain  "backend.example.com"  "public.example.com"
ProxyPassReverseCookiePath  "/"  "/mirror/foo/"

не только приведёт к внутреннему преобразованию локального запроса к http://example.com/mirror/foo/bar в прокси-запрос к http://backend.example.com/bar (эту функциональность здесь обеспечивает ProxyPass), но и обработает перенаправления, которые сервер backend.example.com отправляет при перенаправлении http://backend.example.com/bar на http://backend.example.com/quux. Перед отправкой клиенту ответа HTTP-перенаправления Apache httpd изменит этот адрес на http://example.com/mirror/foo/quux. Обратите внимание, что имя хоста, используемое для построения URL, выбирается с учётом настройки директивы UseCanonicalName.

Обратите внимание, что эту директиву ProxyPassReverse также можно использовать совместно с функцией прокси (RewriteRule ... [P]) из mod_rewrite, поскольку она не зависит от соответствующей директивы ProxyPass.

Необязательное ключевое слово interpolate, используемое вместе с ProxyPassInterpolateEnv, включает подстановку переменных окружения, заданных в формате ${VARNAME}. Обратите внимание, что подстановка не поддерживается в части URL, содержащей схему.

При использовании внутри секции <Location> первый аргумент опускается, а локальный каталог берётся из <Location>. То же происходит внутри секции <LocationMatch>, однако, вероятно, это не даст ожидаемого результата, поскольку ProxyPassReverse интерпретирует регулярное выражение буквально как путь; если в такой ситуации это необходимо, укажите ProxyPassReverse вне секции или в отдельной секции <Location>.

Эта директива не поддерживается в секциях <Directory> или <Files>.

Директива ProxyPassReverseCookieDomain

Описание: Корректирует строку Domain в заголовках Set-Cookie от сервера, проксируемого в обратном направлении
Синтаксис:
ProxyPassReverseCookieDomain internal-domain public-domain [interpolate]
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_proxy

Используется практически так же, как ProxyPassReverse, но вместо перезаписи заголовков, содержащих URL, эта директива перезаписывает строку domain в заголовках Set-Cookie.

Директива ProxyPassReverseCookiePath

Описание: Корректирует строку Path в заголовках Set-Cookie от сервера, проксируемого в обратном направлении
Синтаксис:
ProxyPassReverseCookiePath internal-path public-path [interpolate]
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_proxy

Полезна совместно с ProxyPassReverse в ситуациях, когда пути URL сервера backend сопоставляются с общедоступными путями на обратном прокси. Эта директива перезаписывает строку path в заголовках Set-Cookie. Если начало пути cookie совпадает с internal-path, путь cookie будет заменён на public-path.

В примере с ProxyPassReverse директива:

ProxyPassReverseCookiePath  "/"  "/mirror/foo/"

перепишет cookie с путём backend / (или /example или, по сути, любым другим) на /mirror/foo/.

Директива ProxyPreserveHost

Описание: Использует входящий заголовок HTTP-запроса Host для прокси-запроса
Синтаксис:
ProxyPreserveHost On|Off
Значение по умолчанию:
ProxyPreserveHost Off
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_proxy
Совместимость: Доступна в контексте каталога начиная с версии 2.3.3.

Если этот параметр включён, строка Host: из входящего запроса будет передана проксируемому хосту вместо имени хоста, указанного в строке ProxyPass.

Обычно этот параметр следует отключать: Off. Он полезен главным образом в особых конфигурациях, например при массовом размещении виртуальных хостов на основе имён за прокси, когда серверу backend необходимо анализировать исходный заголовок Host.

Директива ProxyReceiveBufferSize

Описание: Размер сетевого буфера для проксируемых соединений HTTP и FTP
Синтаксис:
ProxyReceiveBufferSize bytes
Значение по умолчанию:
ProxyReceiveBufferSize 0
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy

Директива ProxyReceiveBufferSize задаёт явный размер сетевого буфера (TCP/IP) для проксируемых соединений HTTP и FTP, повышая пропускную способность. Значение должно быть больше 512 или равно 0, чтобы использовать размер буфера системы по умолчанию.

Пример

ProxyReceiveBufferSize 2048

Директива ProxyRemote

Описание: Удалённый прокси для обработки определённых запросов
Синтаксис:
ProxyRemote match remote-server [username:password]
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy
Совместимость: Необязательный третий аргумент доступен только в httpd 2.4.59 и более поздних версиях.

Эта директива задаёт удалённые прокси для данного прокси. match — это либо имя схемы URL, поддерживаемой удалённым сервером, либо частичный URL, для которого следует использовать удалённый сервер, либо *, указывающее, что к серверу следует обращаться для всех запросов. remote-server — частичный URL удалённого сервера. Синтаксис:

remote-server = scheme://hostname[:port]

scheme фактически задаёт протокол, который следует использовать для связи с удалённым сервером; этот модуль поддерживает только http и https. При использовании https запросы пересылаются через удалённый прокси с помощью метода HTTP CONNECT.

Пример

ProxyRemote "http://goodguys.example.com/" "http://mirrorguys.example.com:8000"
ProxyRemote "*" "http://cleverproxy.localdomain"
ProxyRemote "ftp" "http://ftpproxy.mydomain:8080"

В последнем примере прокси будет пересылать запросы FTP, инкапсулированные в ещё один запрос HTTP-прокси, другому прокси, который умеет их обрабатывать.

Этот параметр также поддерживает конфигурацию обратного прокси: веб-сервер backend можно встроить в пространство URL виртуального хоста, даже если этот сервер скрыт за другим прямым прокси.

Можно указать необязательный третий аргумент username:password, задающий учётные данные базовой аутентификации для передачи настроенному удалённому прокси. Учётные данные всегда отправляются без предварительного ожидания запроса базовой аутентификации от удалённого прокси. Переменная окружения Proxy-Chain-Auth не действует, если используется этот аргумент.

Директива ProxyRemoteMatch

Описание: Удалённый прокси для обработки запросов, соответствующих регулярным выражениям
Синтаксис:
ProxyRemoteMatch regex remote-server [username:password]
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy
Совместимость: Необязательный третий аргумент доступен только в httpd 2.4.59 и более поздних версиях.

Директива ProxyRemoteMatch идентична директиве ProxyRemote, за исключением того, что первый аргумент представляет собой регулярное выражение, сопоставляемое с запрошенным URL.

Директива ProxyRequests

Описание: Включает прямые (стандартные) прокси-запросы
Синтаксис:
ProxyRequests On|Off
Значение по умолчанию:
ProxyRequests Off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy

Этот параметр разрешает или запрещает Apache httpd работать в качестве прямого прокси-сервера. (Установка для ProxyRequests значения Off не отключает использование директивы ProxyPass.)

В типичной конфигурации обратного прокси или шлюза для этого параметра следует задать Off.

Чтобы включить проксирование сайтов HTTP или FTP, на сервере также необходимо наличие mod_proxy_http или mod_proxy_ftp (либо обоих модулей).

Чтобы включить прямое проксирование сайтов HTTPS, на сервере необходимо включить mod_proxy_connect.

Предупреждение

Не включайте проксирование с помощью ProxyRequests, пока не защитите сервер. Открытые прокси-серверы представляют опасность как для вашей сети, так и для Интернета в целом.

См. также

  • Прямые и обратные прокси/шлюзы

Директива ProxySet

Описание: Задаёт различные параметры балансировщика нагрузки Proxy или его участников
Синтаксис:
ProxySet url key=value [key=value ...]
Контекст: конфигурация сервера, виртуальный хост, каталог
Статус: Расширение
Модуль: mod_proxy
Совместимость: ProxySet доступна только в Apache HTTP Server 2.2 и более поздних версиях.

Эта директива служит альтернативным способом задания любых параметров, доступных для балансировщиков нагрузки Proxy и рабочих процессов; обычно это делается с помощью директивы ProxyPass. Если она используется внутри контейнера <Proxy balancer url|worker url>, аргумент url не требуется. При этом соответствующий балансировщик или рабочий процесс создаётся автоматически. Это может быть полезно при настройке обратного прокси с помощью RewriteRule вместо директивы ProxyPass.

<Proxy "balancer://hotcluster">
    BalancerMember "http://www2.example.com:8080" loadfactor=1
    BalancerMember "http://www3.example.com:8080" loadfactor=2
    ProxySet lbmethod=bytraffic
</Proxy>
<Proxy "http://backend">
    ProxySet keepalive=On
</Proxy>
ProxySet "balancer://foo" lbmethod=bytraffic timeout=15
ProxySet "ajp://backend:7001" timeout=15

Предупреждение

Имейте в виду, что один и тот же ключ параметра может иметь разный смысл в зависимости от того, применяется ли он к балансировщику или рабочему процессу, как показано выше на двух примерах с параметром timeout.

Директива ProxySourceAddress

Описание: Задаёт локальный IP-адрес для исходящих прокси-соединений
Синтаксис:
ProxySourceAddress address
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy
Совместимость: Доступна начиная с версии 2.3.9

Эта директива позволяет задать конкретный локальный адрес, который будет привязан при подключении к серверу backend.

Директива ProxyStatus

Описание: Отображает состояние балансировщика нагрузки Proxy в mod_status
Синтаксис:
ProxyStatus Off|On|Full
Значение по умолчанию:
ProxyStatus Off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy
Совместимость: Доступна начиная с версии 2.2

Эта директива определяет, будут ли данные о состоянии балансировщика нагрузки прокси отображаться на странице mod_status server-status.

Примечание

Full означает то же, что и On

Директива ProxyTimeout

Описание: Тайм-аут сети для проксируемых запросов
Синтаксис:
ProxyTimeout seconds
Значение по умолчанию:
Value of Timeout
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy

Эта директива позволяет задать тайм-аут для прокси-запросов. Это полезно при работе с медленным или нестабильным сервером приложений, который зависает: вместо того чтобы неопределённо долго ждать ответа сервера, можно просто вернуть сообщение о тайм-ауте и корректно завершить запрос.

Директива ProxyVia

Описание: Информация в заголовке HTTP-ответа Via для проксируемых запросов
Синтаксис:
ProxyVia On|Off|Full|Block
Значение по умолчанию:
ProxyVia Off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_proxy

Эта директива управляет использованием прокси заголовка HTTP Via:. Она предназначена для управления потоком прокси-запросов в цепочке прокси-серверов. Объяснение строк заголовка Via: см. в разделе 14.45 документа RFC 2616 (HTTP/1.1).

  • Если задано значение Off, используемое по умолчанию, специальная обработка не выполняется. Если запрос или ответ содержит заголовок Via:, он передаётся без изменений.
  • Если задано значение On, в каждый запрос и ответ добавляется строка заголовка Via: с указанием текущего хоста.
  • Если задано значение Full, в каждую созданную строку заголовка Via: дополнительно включается версия сервера Apache httpd в виде поля комментария Via:.
  • Если задано значение Block, из каждого прокси-запроса удаляются все строки заголовка Via:. Новые заголовки Via: не создаются.

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_proxy.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API