0

希望可以有人帮帮我 :)

我尝试为 plex 重定向配置 HAProxy,但尚未找到解决方案。所以基本上要运行 plex 主页,您应该转到 => IPADRESS:PORT/web 重定向到 IPADRESS:PORT/web/index.html

我做了这种重定向:

use_backend plex if { hdr_beg(Host) -i plex. }

backend plex
    server plex localhost:32400 check

没关系,我可以加入 plex => plex.mydomain.tld/web

但我希望能够使用此 URL => plex.mydomain.tld 加入 plex

我试图添加这一行:

reqrep ^([^\ :]*)\ /(.*)     \1\ /web\2

更改很好,我的 URL 切换到 => plex.mydomain.tld/web/index.html

但我有一个 404 错误...

我应该采取什么样的技巧来从 plex.mydomain.tld 访问 plex?

谢谢 !

4

3 回答 3

2

找到了一些帮助我弄清楚的信息:

global
    log         127.0.0.1 syslog
    maxconn     1000
    user        haproxy
    group       haproxy
    daemon
    tune.ssl.default-dh-param 4096
    ssl-default-bind-options no-sslv3 no-tls-tickets
    ssl-default-bind-ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH


defaults
    log  global
    mode  http
    option  httplog
    option  dontlognull
    option  http-server-close
    option  forwardfor except 127.0.0.0/8
    option  redispatch
    option  contstats
    retries  3
    timeout  http-request 10s
    timeout  queue 1m
    timeout  connect 10s
    timeout  client 1m
    timeout  server 1m
    timeout  check 10s

listen stats
    bind *:9090
    mode  http
    maxconn  10
    stats  enable
    stats  hide-version
    stats  realm Haproxy\ Statistics
    stats  uri /
    stats  auth admin:admin

frontend ALL
    bind   *:80
    bind   *:443 ssl crt /etc/haproxy/certs/nomercy.myqnapcloud.com.pem crt /etc/haproxy/certs/nomercy.myqnapcloud.com.pem
    mode   http

    # Define path for lets encrypt
    acl is_letsencrypt path_beg -i /.well-known/acme-challenge/
    use_backend letsencrypt if is_letsencrypt

    # Define hosts
    acl host_website hdr(host) -i nomercy.myqnapcloud.com

    # Direct hosts to backend
    use_backend website if host_website

    # Redirect port 80 to 443
    # But do not redirect letsencrypt since it checks port 80 and not 443
    redirect scheme https code 301 if !{ ssl_fc } !is_letsencrypt

backend letsencrypt
    server letsencrypt 127.0.0.1:8888

backend website
    balance         roundrobin
    option          httpchk GET /check
    cookie          SERVERID insert indirect nocache
    http-check      expect rstring ^UP$
    default-server  inter 3s fall 3 rise 2
    server          server1 192.168.2.151:8888 check
    server          server2 192.168.2.152:8888 check
    server          server3 192.168.2.153:8888 check


listen plex
    bind *:32400 ssl crt /etc/haproxy/certs/nomercy.myqnapcloud.com.pem crt /etc/haproxy/certs/nomercy.myqnapcloud.com.pem
    balance         roundrobin
    option          httpchk GET /check
    http-check      expect rstring ^UP$
    default-server  inter 3s fall 3 rise 2
    server          server1 192.168.2.149:32400 check port 8888
    server          server2 192.168.2.148:32400 check port 8888
    server          server3 192.168.2.147:32400 check port 8888

如果您没有安装 ssl 凭据,则可以删除它。

于 2018-01-20T02:47:05.560 回答
1

不幸的是,这里的问题与您的 HAProxy 配置无关。相反,是 Plex 导致了这个问题。

例子

使用您的配置,当您转到plex.mydomain.tldHAProxy 时,正在添加,/web因此 Plex 获得以下 url: plex.mydomain.tld/web。这是正确的,但是 Plex 会希望将浏览器转发到plex.mydomain.tld/web/index.html. 但是,当浏览器发送请求或该 url 时,HAProxy 会/web介入并再次添加该额外内容,并且设置为 Plex 的结果 urlplex.mydomain.tld/web/web/index.html不存在,因此您得到 404 错误。

虽然plex.mydomain.tld/index.html可能会起作用,但我认为由于上述问题,从该页面到任何其他页面的所有链接都将不起作用。

要解决这个问题,你可以

  1. 查看 Plex 的配置,看看是否可以在没有/web.
  2. 这里获得灵感,您可以像这样配置 HAProxy:

    frontend http
        mode http
        bind *:80
    
        acl plex hdr_beg(Host) -i plex.
        acl root_dir path_reg ^$|^/$
        acl no_plex_header req.hdr_cnt(X-Plex-Device-Name) -i 0
    
        redirect location http://plex.mydomain.tld/web/index.html 301 if no_plex_header root_dir plex
        use_backend plex if plex
    
    backend plex
        server plex localhost:32400 check
    

    关键区别在于如果未设置标头redirect location,则将重定向/到的行。您必须检查标头的原因是 plex 似乎用于其他用途。/web/index.htmlX-Plex-Device-Name/

    注意:此配置是一个示例,我根本没有测试过

希望有帮助。

于 2016-01-22T06:09:04.457 回答
0

我想重申一下,我使用了 JamesStewy 提供的解决方案,并且它有效,并进行了较小的更正;

redirect location http://plex.mydomain.tld/web/index.html code 301 if no_plex_header root_dir plex

至少,这对我来说是必要的(运行 haproxy 1.7.2)。

于 2017-02-21T11:33:43.907 回答