Добавить «player-» перед числовыми URL-адресами с помощью HAProxy 1.5

Я запускаю веб-игру, встроенную в Wordpress / Jetty, за HAProxy 1.5 на CentOS 7. Linux.

Доступ к веб-сайту можно получить как http ] и https .

Я модифицировал Wordpress, чтобы отображать страницы профиля игрока по таким URL-адресам, как:

https://slova.de/player-12345

, где 12345 - числовой идентификатор игрока в моей веб-игре.

] Это хорошо работает, но я хотел бы упростить приведенные выше URL-адреса до

https://slova.de/12345

, а затем использовать HAProxy до , чтобы добавить часть «player-» к путям, содержащим только числа .

Я добавил в /etc/haproxy/haproxy.cfg введите строку:

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

Однако по какой-то причине это приводит к неработающему URL:

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

Ниже приведен мой полный файл haproxy.cfg , чтобы предоставить больше контекста:

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
1
задан 27 August 2017 в 18:58
1 ответ

Это означает, что вы отправляете ответ перенаправления 301 на каждый запрос, который имеет номер 5 в конце URL.

Итак, если ваш первый запрос - для http://www.example.com/5 ваша конфигурация будет отправлять HTTP-перенаправление 301 на URL http://www.example.com/player-5 . Затем браузер запрашивает этот URL-адрес, и HAProxy снова отправляет HTTP-перенаправление 301, теперь на http://www.example.com/player-/player-5 и так далее, пока не будет установлен некоторый предел длины URL-адреса. достигнут.

Я предполагаю, что вы не хотите выполнять здесь 301 редирект, а прикрепите префикс player- к запросу, идущему к Jetty. Чтобы это произошло, вам необходимо использовать директиву http-request set-path .

Однако, если вы хотите сделать 301 редирект , вам необходимо уточнить свой условие, чтобы перенаправление выполнялось только тогда, когда в URL-адресе нет префикса player- .

Например, это может сработать:

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

Я сам не использовал HAProxy, так что это только на основе документации HAProxy и моей интерпретации того, как работают его ACL.

1
ответ дан 3 December 2019 в 23:26

Теги

Похожие вопросы