負荷分散に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 }