Назад | Перейти на главную страницу

Добавьте «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

Это означает, что вы отправляете ответ переадресации 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 redirect, то вам нужно уточнить ваше условие, чтобы перенаправление выполнялось только тогда, когда нет player- префикс в URL.

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

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

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