借助 HAProxy 1.5 在数字 URL 前添加“player-”

借助 HAProxy 1.5 在数字 URL 前添加“player-”

我在 CentOS 7 Linux 上的 HAProxy 1.5 后面运行一个嵌入在 Wordpress/Jetty 中的网络游戏。

该网站可以通过http和访问https

我已经修改了 Wordpress,使其在以下 URL 上显示玩家资料页面:

https://slova.de/player-12345

12345我的网络游戏中的数字玩家 ID 在哪里。

这很有效,但我想将上述 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-/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

5这意味着您正在向 URL 末尾带有数字的每个请求发送 301 重定向响应。

因此,如果您的第一个请求是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 如何工作的解释。

相关内容