負荷分散に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にリダイレクトされます
回答:
HAProxy 1.5以降を使用し、フロントエンド構成に次の行を追加するだけです。
redirect scheme https code 301 if !{ ssl_fc }
http-request redirect scheme https code 301 if !{ ssl_fc }。ALOHA HAProxy 7.0のhttpリダイレクションのドキュメントには、「両方のディレクティブの構文は同じですが、リダイレクトはレガシーと見なされ、構成はhttp-requestリダイレクトフォームに移行する必要がある」と記載されています。完全に確信はありませんが、同じ説明がHAProxyのオープンソースバージョンの新しいリリースにも当てはまると思います。
                    私は以前の答えにコメントする十分な評判がないので、私はジェイ・テイラーの答えを補足するために新しい答えを投稿しています。基本的に彼の回答はリダイレクトを行いますが、暗黙的なリダイレクトですが、302(一時的なリダイレクト)を発行しますが、質問ではウェブサイト全体が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://parsnips.net/haproxy-http-to-https-redirect/によると、以下を含むようにhaproxy.cfgを構成するのと同じくらい簡単なはずです。
#---------------------------------------------------------------------
# Redirect to secured
#---------------------------------------------------------------------
frontend unsecured *:80
    redirect location https://foo.bar.com
#---------------------------------------------------------------------
# frontend secured
#---------------------------------------------------------------------
frontend  secured *:443
   mode  tcp
   default_backend      app
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    mode  tcp
    balance roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check
user2966600のソリューションのわずかなバリエーション...
単一のURL を除くすべてをリダイレクトするには(複数のフロントエンド/バックエンドの場合):
redirect scheme https if !{ hdr(Host) -i www.mydomain.com } !{ ssl_fc }
Jay Taylorが言ったように、HAProxy 1.5-devにはredirect scheme設定ディレクティブがあり、必要なものを正確に実現します。
ただし、1.5を使用できず、HAProxyをソースからコンパイルする準備ができている場合はredirect scheme、1.4で機能するように機能をバックポートしました。パッチはこちらから入手できます:http : //marc.info/?l=haproxy&m=138456233430692&w=2
URLを書き換えたい場合は、次の行を追加してサイトの仮想ホストを変更する必要があります。
### Enabling mod_rewrite
Options FollowSymLinks
RewriteEngine on
### Rewrite http:// => https://
RewriteCond %{SERVER_PORT} 80$
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,NC,L]
ただし、ポート80のすべての要求をプロキシの背後にあるWebサーバーのポート443にリダイレクトする場合は、haproxy.cfgで次の例の設定を試すことができます。
##########
# Global #
##########
global
    maxconn 100
    spread-checks 50
    daemon
    nbproc 4
############
# Defaults #
############
defaults
    maxconn 100
    log global
    mode http
    option dontlognull
    retries 3
    contimeout 60000
    clitimeout 60000
    srvtimeout 60000
#####################
# Frontend: HTTP-IN #
#####################
frontend http-in
    bind *:80
    option logasap
    option httplog
    option httpclose
    log global
    default_backend sslwebserver
#########################
# Backend: SSLWEBSERVER #
#########################
backend sslwebserver
    option httplog
    option forwardfor
    option abortonclose
    log global
    balance roundrobin
    # Server List
    server sslws01 webserver01:443 check
    server sslws02 webserver02:443 check
    server sslws03 webserver03:443 check
これがお役に立てば幸いです
これをHAProxyフロントエンド構成に追加します。
acl http      ssl_fc,not
http-request redirect scheme https if http
redirect scheme https code 301 if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }