在 http 代理前使用 HAproxy (SSL)

在 http 代理前使用 HAproxy (SSL)

我目前正在尝试构建一个应用程序,该应用程序可以在我的波利波进程。使用 http 一切正常,但当我转到 https 时,haproxy 只显示“400 bad”请求,知道为什么吗?

这是我的设置:

                                                <-> 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 卸载。

答案1

tl;dr:没关系,这是公共 URL,并且删除option http_proxy

引用文档

Location 响应标头指示页面重定向到的 URL。它仅在与 3xx(重定向)或 201(已创建)状态响应一起提供时才有意义。

重定向必须由用户代理执行,因此必须提供访问 HAProxy 时要使用的正确 URL。

来自HAProxy 文档

选项 http_proxy [...] 在此模式下,不声明任何服务器,连接将转发到“http://”方案后的 URL 中找到的 IP 地址和端口。

这不是您想要的。删除该指令。

相关内容