Можете ли вы редактировать заголовки входящего запроса в Apache httpd v2.4.6? - PullRequest
1 голос
/ 16 июня 2020

Apache в документации указано ProxyPreserveHost:

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

В противном случае:

имя хоста, указанное в строке ProxyPass (используется)

В Apache conf, есть ли способ установить пользовательский хост на тот, который не любой из этих?
например ProxySetHost customHostName

// EDIT
В nginx можно использовать эту аннотацию:

nginx .ingress.kubernetes.io / proxy-ssl-name :
Позволяет установить proxy_ssl_name. Это позволяет переопределить имя сервера, используемое для проверки сертификата прокси-сервера HTTPS. Это значение также передается через SNI при установке соединения с прокси-сервером HTTPS.

Есть ли что-нибудь подобное в Apache httpd?

1 Ответ

0 голосов
/ 17 июня 2020

Думаю, я нашел свой ответ. Чтобы быть более ясным, я искал способ изменить хост, отправленный через расширение SNI, которое происходит до того, как заголовки http отправляются между моим интерфейсом apache и сервером nginx. Похоже, что SNI был установлен при использовании SSLProxyPreserveHost, что очевидно, если вы посмотрите исходный код модуля (однако не в документации).

Я покопался в исходном коде прокси-модуля для httpd на github, и похоже, что есть только 3 случая, когда хост меняется для SNI:

(proxy_util. c - https://github.com/apache/httpd/blob/trunk/modules/proxy/proxy_util.c)

Случай 1: (Объяснено блоком комментариев)

        /*
         * In the case of ProxyPreserveHost on use the hostname of
         * the request if present otherwise use the one from the
         * backend request URI.
         */
        dconf = ap_get_module_config(r->per_dir_config, &proxy_module);
        if (dconf->preserve_host) {
            ssl_hostname = r->hostname;
        }

Случай 2: Думаю, это происходит, только если настроен прокси-сервер (я использую обратный прокси-сервер).

        else if (conn->forward
                 && ((forward_info *)(conn->forward))->use_http_connect) {
            ssl_hostname = ((forward_info *)conn->forward)->target_host;
        }

Случай 3: В противном случае установите хост, указанный в строке ProxyPass.

        else {
            ssl_hostname = conn->hostname;
        }

Я добавил комментарий к одному из отчетов об ошибках для httpd, связав если кому интересно: https://bz.apache.org/bugzilla/show_bug.cgi?id=64422

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...