Назад | Перейти на главную страницу

Использование Apache httpd для моделирования AWS NLB

Я использую AWS Network Load Balancer и включил «Протокол прокси V2» в его целевой группе. Соединения перенаправляются в некоторые контейнеры докеров, на которых запущен nginx с такой конфигурацией:

server {
        listen 8080 proxy_protocol;
        set_real_ip_from 0.0.0.0/0;
        real_ip_header proxy_protocol;
        #...
}

Все работает хорошо, но теперь я бы хотел, чтобы эти докер-контейнеры работали локально, для тестовой среды. Итак, поскольку у меня нет локального AWS NLB, я подумал, что смогу смоделировать его поведение с помощью Apache http. Вот как я настроил виртуальный хост, он должен поддерживать SSL.

<VirtualHost *:443>
    ServerAdmin mail@example.com
    DocumentRoot "G:/path"
    ServerName host.example.com
    SSLEngine on
    SSLCertificateFile "${SRVROOT}/conf/certs/host.crt"
    SSLCertificateKeyFile "${SRVROOT}/conf/certs/host.key"
    ProxyPass / balancer://mycluster/
    <Proxy "balancer://mycluster">
        BalancerMember "http://localhost:8117"
    </Proxy>
</VirtualHost>

К сожалению, это не работает. Я думаю, это потому, что Apache http не «сообщает протокол прокси» BalanceMember. Когда я пытаюсь сделать запрос, я получаю эту ошибку.

<body>
    <h1>Proxy Error</h1>
    <p>The proxy server received an invalid
        response from an upstream server.<br />
The proxy server could not handle the request<p>Reason: <strong>Error reading from remote server</strong></p>
    </p>
</body>

Журнал ошибок сообщает эти две строки

[Mon Jun 08 13:19:43.324809 2020] [proxy_http:error] [pid 17460:tid 1164] (20014)Internal error (specific information not available): [client 127.0.0.1:51817] AH01102: error reading status line from remote server localhost:8117
[Mon Jun 08 13:19:43.324809 2020] [proxy:error] [pid 17460:tid 1164] [client 127.0.0.1:51817] AH00898: Error reading from remote server returned by /

Возможно ли моделировать NLB с помощью Apache httpd? Должен ли я просто отказаться и использовать вместо этого HAProxy? Спасибо

Поддержка протокола прокси Afaik для Apache HTTPD осуществляется через сторонний модуль.

Вы можете узнать об этом здесь: mod_proxy_protocol документ и тут: mod_proxy_protocol страница github

Объяснение здесь довольно простое, сначала загрузите модуль, включите протокол прокси с помощью директивы:

ProxyProtocol on