負荷分散に HAProxy を使用していますが、サイトで https のみをサポートしたいと考えています。したがって、ポート 80 のすべてのリクエストをポート 443 にリダイレクトしたいと思います。
どうすればいいですか?
編集: クエリ パラメータを保持しながら、https で同じ URL にリダイレクトしたいと考えています。したがって、http://foo.com/barはhttps://foo.com/barにリダイレクトされます。
負荷分散に HAProxy を使用していますが、サイトで https のみをサポートしたいと考えています。したがって、ポート 80 のすべてのリクエストをポート 443 にリダイレクトしたいと思います。
どうすればいいですか?
編集: クエリ パラメータを保持しながら、https で同じ URL にリダイレクトしたいと考えています。したがって、http://foo.com/barはhttps://foo.com/barにリダイレクトされます。
以前の回答にコメントするのに十分な評判がないため、Jay Taylor の回答を補完する新しい回答を投稿しています。基本的に、彼の答えはリダイレクトを行いますが、暗黙のリダイレクトです。つまり、302 (一時的なリダイレクト) が発行されますが、質問は Web サイト全体が https として提供されることを通知するため、適切なリダイレクトは 301 (永続的なリダイレクト) である必要があります。 )。
redirect scheme https code 301 if !{ ssl_fc }
小さな変更のように見えますが、ウェブサイトによっては影響が大きくなる可能性があります。恒久的なリダイレクトにより、最初から http バージョンを探す必要がないことをブラウザーに通知します (将来のリダイレクトを回避します) - https の時間の節約になりますサイト。SEOにも役立ちますが、リンクのジュースを分割するわけではありません.
すべてのトラフィックをリダイレクトするには:
redirect scheme https if !{ ssl_fc }
単一の URL をリダイレクトするには (複数のフロントエンド/バックエンドの場合)
redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
すべての http を https にリダイレクトする最も保証された方法は次のとおりです。
frontend http-in
bind *:80
mode http
redirect scheme https code 301
これは 'code 301' を使用した少し手の込んだものですが、それが永続的であることをクライアントに知らせることもできます。'mode http' の部分はデフォルト設定では必須ではありませんが、害はありません。デフォルトセクションにある場合mode tcp
(私がしたように)、それは必要です。
Jay Taylor が言ったように、HAProxy 1.5-dev にはredirect scheme
構成ディレクティブがあり、必要なものを正確に実現します。
ただし、1.5 を使用できない場合、およびソースから HAProxy をコンパイルする準備ができている場合はredirect scheme
、1.4 で機能するように機能をバックポートしました。ここでパッチを入手できます: http://marc.info/?l=haproxy&m=138456233430692&w=2
HAProxy の新しいバージョンでは、使用することをお勧めします
http-request redirect scheme https if !{ ssl_fc }
http トラフィックを https にリダイレクトします。
ACL を使用してトラフィックを区別しないのはなぜですか? 私の頭の上に:
acl go_sslwebserver path bar
use_backend sslwebserver if go_sslwebserver
これは、マシュー・ブラウンが答えたものの上にあります。
ha docsを参照し、hdr_dom などを検索して、より多くの ACL オプションを見つけてください。たくさんの選択肢があります。