Prefira o “player-” antes dos URLs numéricos com a ajuda do HAProxy 1.5

1

Eu rodei um jogo da Web embutido no Wordpress / Jetty por trás do HAProxy 1.5 no CentOS 7 Linux.

O site pode ser acessado como http e https .

Eu modifiquei o Wordpress para exibir as páginas de perfil dos jogadores em URLs como:

https://slova.de/player-12345

onde 12345 é um ID de jogador numérico no meu jogo da Web.

Isso funciona bem, mas eu gostaria de simplificar as URLs acima para

https://slova.de/12345

e, em seguida, use HAProxy para prefixar o "player- "parte para caminhos somente numéricos .

Então, adicionei ao arquivo /etc/haproxy/haproxy.cfg a linha:

http-request redirect code 301 prefix /player- if { path_end /5 }

Isso resulta no URL quebrado por algum motivo:

https://slova.de/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/5

Abaixo está o meu arquivo haproxy.cfg completo para fornecer mais contexto:

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    stats socket /var/lib/haproxy/stats

    tune.ssl.default-dh-param 2048

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

    # for WebSocket connections
    timeout tunnel          1h
    timeout client-fin      1m

frontend public
    bind 144.76.184.151:80
    bind 144.76.184.151:443 ssl crt /etc/pki/tls/certs/slova.de.pem no-sslv3
    http-request deny if { path_beg /xmlrpc.php }

    http-request redirect code 301 prefix /player- if { path_end /5 }

    default_backend jetty

backend jetty
    server domain 127.0.0.1:8080 send-proxy
    
por Alexander Farber 27.08.2017 / 17:58

1 resposta

1

Isso significa que você está enviando uma resposta de redirecionamento 301 para cada solicitação que tenha o número 5 no final do URL.

Portanto, se sua primeira solicitação for http://www.example.com/5 , sua configuração enviará um redirecionamento HTTP 301 para a URL http://www.example.com/player-5 . O navegador solicita essa URL e o HAProxy envia novamente o redirecionamento HTTP 301, agora para http://www.example.com/player-/player-5 e assim por diante, até que algum limite de tamanho de URL seja atingido.

Suponho que você não queira fazer um redirecionamento 301 aqui, mas anexe o prefixo player- à solicitação indo para o Jetty. Para que isso aconteça, você precisa usar a diretiva http-request set-path .

No entanto, se você quiser fazer um 301 redirect , precisará refinar sua condição para que o redirecionamento seja feito somente quando não houver um prefixo player- no URL.

Por exemplo, isso pode funcionar:

http-request redirect code 301 prefix /player- if { path_end /5 and !path_end /player-5 }

Eu mesmo não usei o HAProxy, então isso é baseado somente na documentação do HAProxy e na minha interpretação de como suas ACLs funcionam.

    
por 27.08.2017 / 18:32