Я запускаю веб-игру, встроенную в 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 редирект
, вам необходимо уточнить свой условие, чтобы перенаправление выполнялось только тогда, когда в URL-адресе нет префикса player-
.
Например, это может сработать:
http-request redirect code 301 prefix /player- if { path_end /5 and !path_end /player-5 }
Я сам не использовал HAProxy, так что это только на основе документации HAProxy и моей интерпретации того, как работают его ACL.