HAProxy http сквозной прокси вместо перенаправления 304 - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь получить эквивалент прохода nginx, где пользователь увидит URL моего сайта в адресной строке, но получит весь контент для прокси с другого сайта.

На данный момент код нижеперенаправляет пользователя в example2, возвращая 304 вместо прокси-трафика.

Мне нужно, чтобы он работал с http (не tcp), потому что это нужно мне как часть теста AB, где мне нужно проверить куки,Пожалуйста, проверьте комментарии в коде ниже для того, что я пытаюсь сделать.

defaults
        mode http
        log global
        option httplog
        log 127.0.0.1 local0
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms

listen  http
        bind 127.0.0.1:8080

        acl set_cookie path_beg /set-cookie

        use_backend b-backend if { req.cook(SITEID) -m beg b-backend }
        use_backend b-backend if set_cookie

        default_backend ab-split-backend

backend a-backend
        option forwardfor
        server example1 example1.com:443 check maxconn 3000 inter 30s

backend b-backend
        cookie SITEID insert
        option http_proxy
        # how do I get example2 to passtrough and not 304 redirect?
        server example2 example2.com:443 check maxconn 3000 inter 30s

backend ab-split-backend
        balance roundrobin
        cookie SITEID insert indirect nocache maxlife 48h

        # how do I get example2 to passtrough?
        server example2 example2.com:443 weight 50 cookie b-backend

        server example1 example1.com:443 weight 50 cookie a-backend

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

похоже, что вы пытаетесь удержать вашу систему от попыток пропустить ее через SSL и вместо этого проводить тестирование на основе открытого текста для целей тестирования.Я бы порекомендовал посмотреть фрагмент из моего конфига ниже по перенаправлениям http-запроса, а также изучить схемы HAProxy.Я также рекомендовал бы увидеть дополнительный пример для перенаправления на основе экземпляров, в частности, для заданного местоположения, чтобы случайно не расшифровать трафик, который вы хотите сохранить в зашифрованном виде.

Что касается информации, передаваемой из другого местоположения, ваш лучшийСтавка на это будет с использованием Cloudflare, особенно если вы ищете какую-то форму DDoS / дополнительные уровни безопасности.Альтернативой является создание собственного настраиваемого решения для защиты от DDoS, что является серьезной проблемой.

frontend ALL
 bind   *:80
 bind   *:443 alpn h2,http/1.1 ssl crt /etc/haproxy/certs/eduarmor.com.pem
 http-request redirect scheme https code 301 if !{ ssl_fc }
 http-request redirect code 301 location http://www.%[hdr(host)]%[capture.req.uri] if { hdr(Host) -i eduarmor.com }
 mode   http
0 голосов
/ 10 февраля 2019

HTTP 304 на самом деле не перенаправление, это пустой ответ, указывающий Not Modified, который сообщает клиенту, что сервер ответил бы 200 и обработал бы контент, но запрошенный ресурсне изменился, поэтому клиент может просто использовать то, что он кэшировал.

Так что я не совсем уверен, что вы видите неправильное поведение.То есть ваши запросы могут проходить просто нормально, а внутренний сервер может правильно отвечать 304.

Сервер принимает решение ответить этим кодом на основе информации, предоставленной в запросе.заголовки If-Modified-Since и / или If-None-Match.Поэтому, если вы действительно хотите отключить этот механизм кэширования и каждый раз получать полный ответ 200, вы можете указать HAProxy удалить эти заголовки из входящего запроса:

listen  http
        bind 127.0.0.1:8080

        acl set_cookie path_beg /set-cookie

        # Delete headers related to caching
        http-request del-header If-Modified-Since
        http-request del-header If-None-Match

        use_backend b-backend if { req.cook(SITEID) -m beg b-backend }
        use_backend b-backend if set_cookie

        default_backend ab-split-backend
...