Я пытаюсь настроить тестовый сервер haproxy, который будет охватывать 2 основные области. Автоматическое перенаправление на https, если пользователь использует http, но только при отсутствии определенной части uri.
Например, если пользователь переходит на 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
Позвольте мне предложить несколько вещей:
redirect location <absolute_url> if <conditions>
path_beg -i /blog
Вот предлагаемые мной модификации incoming
часть вашей конфигурации, основанная на этих комментариях. Это должно перенаправить http://www.test.com к https://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
Надеюсь это поможет.