Я запускаю веб-игру, встроенную в 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:
Ниже мой полный 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.