В настоящее время я пытаюсь создать приложение, которое может балансировать нагрузку трафика между моими полипо процессы. С http все работает, найди, но как только я перехожу на https, haproxy просто показывает "400 плохих" запросов. Есть идеи, почему?
Это моя установка:
<-> Polipo 1 (http)
Client <----> (https) HAproxy <----> (http) <-> Polipo 2 (http)
<-> Polipo 3 (http)
Это моя конфигурация HAproxy:
global
maxconn 4096
daemon
tune.ssl.default-dh-param 2048
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
pidfile <%= pid_file %>
defaults
mode http
maxconn 4096
option httplog
option dontlognull
option forwardfor
option http-server-close
retries 3
timeout connect 5s
timeout client 60s
timeout server 60s
frontend rotating_proxies
bind *:<%= port %> ssl crt /etc/ssl/private/mydomain.pem
reqadd X-Forwarded-Proto:\ https
default_backend polipo
option http_proxy
backend polipo
option http_proxy
http-response replace-value Location ^http://(.*)$ https://\1
redirect scheme https if !{ ssl_fc }
balance leastconn
<% backends.each do |b| %>
server <%= b[:name] %><%= b[:port] %> <%= b[:addr] %>:<%= b[:port] %> check maxconn 4096
<% end %>
Я не уверен насчет
http-response replace-value Location ^http://(.*)$ https://\1
Что именно это означает? Polipo использует только http (незашифрованный). HAproxy должен просто выполнять разгрузку ssl.
tl; dr: Все в порядке, это общедоступный URL, и удалите option http_proxy
.
Цитирование документы:
Заголовок ответа Location указывает URL-адрес для перенаправления страницы. Он имеет смысл только в том случае, если его обслуживают с ответом статуса 3xx (перенаправление) или 201 (создано).
Перенаправление должно выполняться пользовательским агентом и, следовательно, должен быть представлен правильный URL-адрес, который будет использоваться при доступе к HAProxy.
option http_proxy [...] В этом режиме сервер не объявляется, и соединение перенаправляется на IP-адрес и порт, указанные в URL-адресе после схемы «http: //».
Это не то, что вам нужно. Отбросьте директиву.