Есть ли способ удалить заголовки запроса обратного прокси-сервера apaches?
При работе в качестве обратного прокси-сервера apache добавляет переадресованные заголовки, как описано здесь.
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#x-headers
В моей конфигурации я настроил сервер A в качестве прямого прокси. Есть такое правило:
RewriteRule proxy:(.*example.com)/(.*) $1.mysecondserver.com/$2 [P]
Это правило позволяет серверу запрашивать ресурс с одного из моих других серверов.
На втором сервере (origin) у меня есть контейнер виртуального хоста для ресурса и другое правило перезаписи, например:
RewriteRule some-regex some-url [P]
Может показаться, что это не имеет смысла, но есть много других вещей, которые я пропустил, поскольку это не является частью проблемы.
Однако этот последний запрос имеет следующие заголовки:
[X-Forwarded-For] => ip of 1st server
[X-Forwarded-Host] => example.myseconserver.com
[X-Forwarded-Server] => example.com
Я хочу, чтобы эти заголовки исчезли.
Кажется, я не могу их сбросить с помощью mod_headers. Я могу добавить больше записей к ним, но я не могу удалить их.
Есть идеи?
Ответы
Ответ 1
исправленный ответ: нет никакого способа сделать это, так как его hardcoded
чтобы исправить это в исходном коде mod_proxy_http.c, найдите следующую часть:
apr_table_mergen(r->headers_in, "X-Forwarded-Server",
r->server->server_hostname);
}
и сразу же после этого добавьте этот код:
// remove any X-Forwarded headers
apr_table_unset(r->headers_in, "X-Forwarded-For");
apr_table_unset(r->headers_in, "X-Forwarded-Host");
apr_table_unset(r->headers_in, "X-Forwarded-Server");
затем скомпилируйте, запустив apxs2 -cia mod_proxy_http.c
Ответ 2
Поскольку Apache 2, как гласит этот симпатичный ответ,
ProxyAddHeaders Off
теоретически отключает это. По моему опыту, это не имело никакого эффекта. Однако в сочетании с
<Proxy *>
ProxyAddHeaders Off
</Proxy>
и с
RequestHeader unset X-Forwarded-Host
RequestHeader unset X-Forwarded-For
RequestHeader unset X-Forwarded-Server
где-то это начало работать.
Ответ 3
У меня была та же проблема на httpd 2.2 на CentOS 5. Установка httpd 2.4 была невозможна. Но по некоторым причинам я не мог полностью переключиться на nginx. Поэтому я сделал это, вставив прокси nginx между httpd и адресом назначения. Итак, у меня было: httpd (localhost:80/path
) → nginx (localhost:81/path
) → http://your.destination/path
. Шаги установки следующие:
- Установите nginx в соответствии с эти инструкции
- Настройте nginx, чтобы избежать проблем с безопасностью.
-
Добавьте местоположение в nginx, которое удалит заголовки запроса обратного прокси httpd. Это может выглядеть так:
location /path {
proxy_set_header x-forwarded-for "";
proxy_set_header x-forwarded-host "";
proxy_set_header x-forwarded-server "";
proxy_pass http://your.destination/path;
}