Есть ли способ удалить заголовки запроса обратного прокси-сервера 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;
    }