私は現在、 polipo プロセス間でトラフィックの負荷を分散できるアプリを自分で構築しようとしています。 httpを使用すると、すべてが機能しますが、httpsに切り替えるとすぐに、haproxyは単に「400bad」リクエストを表示します。理由は何ですか。
これは私の設定です:
<-> 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(作成済み)ステータス応答が提供された場合にのみ意味を提供します。
リダイレクトはユーザーエージェントによって実行される必要があるため、HAProxyにアクセスするときに使用される正しいURLを提示する必要があります。
HAProxy docs から:
オプションhttp_proxy [...]このモードでは、サーバーは宣言されず、接続は「http://」スキームの後にURLで見つかったIPアドレスとポートに転送されます。
これはあなたが望むものではありません。ディレクティブを削除します。