Soru HAProxy Yönlendirmeler ve URI tabanlı eşleme


2 temel alanı kapsayacak bir test haproxy sunucusu kurmaya çalışıyorum. Kullanıcı http kullanıyorsa, ancak yalnızca belirli bir uri parçası yoksa https'e otomatik yönlendirin.

Örneğin, bir kullanıcı nereye giderse http://www.test.com yönlendirileceklerdi https://www.test.com. Ama kullanıcı giderse https://www.test.com/blog veya http://www.test.com/blog yönlendirileceklerdi http://www.test.com/blog.

Bu benim şu andaki testim haproxy.cfg. Ben 1,5-dev17 haproxy çalıştırıyorum

Bununla ilgili herhangi bir yardım büyük beğeni topluyor.

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

6
2018-02-23 11:59


Menşei


Sorunun tam olarak ne çalışmadığı eksik. Gönderdiğiniz yapılandırmada ne olur ve ne olmaz? - daff
Sorun şu ki, bir kullanıcı açıkken yönlendirme'yi https'den http'a zorlamaya çalışırsam test.com/blog beni bir yönlendirme döngüsünde bırakır. - rottmanj
Yapılandırmanızın bir kısmını bir cevapta (aşağıda) çalıştırdım, eğer sizin için işe yararsa bana bildirin. - Nick Jennings


Cevaplar:


Birkaç şey önereyim:

  • Güvenli olmayan ve güvenli yapılandırmanızı iki ayrı bloğa ayırmalısınız, böylece ACL'yi daha kolay kontrol edebilir ve vakaları yeniden yönlendirebilirsiniz.
  • Yönlendirme için formatı kullanmayı deneyin redirect location <absolute_url> if <conditions> 
  • URI yollarını tespit etmek için kullanmayı deneyin. path_beg -i /blog
  • Son olarak, insanları bir HTTPS bağlantısından gerçekten yönlendiremezsiniz; bu, güvensiz kabul edilir ve desteklenmez.

İşte benim için önerilen değişikliklerim incoming Bu yorumlara dayanarak, yapılandırmanızın bir kısmı. Bu yönlendirme olmalı http://www.test.com için https://www.test.com Ve bir girişim yapıldığında başarısız olur https://www.test.com/blog (Orada kullanıcı için bir link önerisi olan bir sayfa koyabilirsiniz).

    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

Bu yardımcı olur umarım.


7
2018-02-23 19:35