web-dev-qa-db-ja.com

HAProxyリダイレクトとURIに基づくマッチング

2つの基本的な領域をカバーするテストhaproxyサーバーをセットアップしようとしています。ユーザーがhttpを使用しているが、特定のuri部分が存在しない場合のみ、httpsに自動リダイレクトします。

たとえば、ユーザーが http://www.test.com にアクセスすると、それらは https://www.test.com にリダイレクトされます。しかし、ユーザーが https://www.test.com/blog または http://www.test.com/blog にアクセスすると、リダイレクトされます- http://www.test.com/blog

これは私の現在のテストhaproxy.cfgです。 haproxy 1.5-dev17を実行しています

これに関するどんな助けでも大歓迎です。

global
  log 127.0.0.1   local0
  log 127.0.0.1   local1 notice
  maxconn 15000
  user haproxy
  group haproxy

defaults
  log     global
  mode    http
  option  httplog
  option  dontlognull
  option abortonclose
  option  http-server-close
  option redispatch
  retries 3  
  timeout queue 600s
  timeout connect 9s
  timeout client 60s
  timeout server 60s
  balance  roundrobin

# Set up application listeners here.

frontend incoming
  bind *:80 name http

  acl has_blog_uri path /blog /blog/

  redirect scheme https if !has_blog_uri !{ ssl_fc }

  bind *:443 ssl crt /etc/haproxy/test.pem


  use_backend blog_app if has_blog_uri

  default_backend Rails_app

backend Rails_app
  option httpchk GET /app_health
 # server app1 10.1.1.1:8080 weight 1 check
  server app2 10.1.1.2:8080 weight 1 check

backend blog_app

  option httpchk GET /blog/check.txt
  server blog 10.1.1.3:8080 check
7
rottmanj

いくつか提案させてください。

  • 安全でない構成と安全な構成を2つの別々のブロックに分離する必要があります。これにより、ACLをより簡単に制御してケースをリダイレクトできます。
  • リダイレクトの場合は、redirect location <absolute_url> if <conditions>の形式を使用してみてください
  • URIパスを検出するには、path_beg -i /blogを使用してみてください
  • 最後に、実際に人々をHTTPS接続からリダイレクトすることはできません。これは安全ではないと見なされ、サポートされていません。

これらのコメントに基づいて、構成のincoming部分に変更を提案します。これは http://www.test.comhttps://www.test.com にリダイレクトし、さらに httpsが試行されると失敗します。 ://www.test.com/blog (ユーザーへのリンク候補を含むページをそこに置くことができます)。

    frontend public
      bind *:80
      acl has_blog_uri path_beg -i /blog
      redirect location https://www.test.com if !has_blog_uri
      use_backend blog_app if has_blog_uri    

    frontend public-ssl
      bind *:443 ssl crt /etc/haproxy/test.pem
      acl has_blog_uri path_beg -i /blog
      use_backend Rails_app if !has_blog_uri

お役に立てれば。

7
Nick Jennings