Модуль 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_ajpCONNECT (для SSL) mod_proxy_connectFastCGI mod_proxy_fcgiftp mod_proxy_ftpHTTP/0.9, HTTP/1.0 и HTTP/1.1 mod_proxy_httpHTTP/2.0 mod_proxy_http2SCGI mod_proxy_scgiUWSGI mod_proxy_uwsgiWS и 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.(обратите внимание на завершающую точку) считаются равными.
См. также
Директива <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>.
См. также
Директива 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> См. также
Директива 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 удалённого сервера, который не может содержать строку запроса.
ProxyPass директива ProxyRequests обычно должна быть установлена в значение off.Начиная с версии 2.4.7, доступна поддержка сокетов домена Unix: для этого используется целевой адрес с префиксом unix:/path/lis.sock|. Например, чтобы проксировать HTTP-запросы и направлять их в UDS по адресу /home/www.socket, следует использовать unix:/home/www.socket|http://localhost/whatever/.
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 и сервером приложений установлен межсетевой экран, который обычно разрывает неактивные соединения. Этот флаг указывает операционной системе отправлять сообщения Частота отправки начальных и последующих проб 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 | - | Однобуквенное значение, определяющее начальный статус этого рабочего процесса.
|
|||||||
| timeout | ProxyTimeout | Тайм-аут сокета в секундах. Количество секунд, в течение которых Apache httpd ожидает получения данных от сервера приложений или их отправки на него. | |||||||
| ttl | - | Время жизни неактивных соединений и соответствующих записей пула соединений в секундах. По достижении этого предела соединение больше не используется; через некоторое время оно будет закрыто. | |||||||
| flusher | flush |
Имя поставщика, используемого |
|||||||
| secret | - | Значение секрета, используемого mod_proxy_ajp. Оно должно совпадать с секретом, настроенным на стороне сервера для соединения AJP.Доступен в Apache HTTP Server 2.4.42 и более поздних версиях. |
|||||||
| upgrade | - |
Протокол, принимаемый |
|||||||
| mapping | - |
Тип сопоставления между path и url. Он определяет нормализацию и/или декодирование (либо его отсутствие), которые
ProxyPass "/special%3Fsegment" "https://example.com/special%3Fsegment" mapping=encoded <Location "/special%3Fsegment"> Require ip 172.17.2.0/24 </Location>
ProxyPass "/some/path" "https://servlet.example.com/some/path" mapping=servlet <Location "/some/path"> Require valid-user </Location> Примечание Рекомендуется использовать на стороне 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, страницу |
| 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