plex的Haproxy重定向配置?

时间:2016-01-20 12:21:10

标签: proxy load-balancing reverse-proxy haproxy plex

希望有人可以帮助我:)。

我尝试为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 /网络

但我希望能够通过此网址加入plex => plex.mydomain.tld

我尝试添加此行:

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

更改很好,我的网址切换为=> plex.mydomain.tld /网络/ index.html中

但我有404错误......

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

谢谢!

3 个答案:

答案 0 :(得分:1)

找到一些帮助我弄明白的信息:

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凭据,则可以将其删除。

答案 1 :(得分:0)

遗憾的是,此问题与您的HAProxy配置无关。相反,它是导致问题的Plex。

示例

根据您的配置,当您转到plex.mydomain.tld时,HAProxy正在添加/web,因此Plex会获得以下网址:plex.mydomain.tld/web。这是正确的,但Plex将要将浏览器转发到plex.mydomain.tld/web/index.html。但是当浏览器发送请求或该网址时,HAProxy会介入并再次添加额外的/web,并且设置为Plex的结果网址为plex.mydomain.tld/web/web/index.html,而且不存在,因此404你得到的错误。

虽然转到plex.mydomain.tld/index.html可能会有效,但我认为从该页面到任何其他页面的所有链接都因为说出问题而无法正常工作。

要解决此问题,您可以

  1. 查看Plex的配置,看看是否可以在/web之外运行它。
  2. here获取灵感,您可以配置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,则/行将从/web/index.html重定向到X-Plex-Device-Name,这是关键区别。您必须检查标头的原因是plex似乎使用/来表示其他内容。

    注意:此配置是一个示例,我还没有对此进行过测试

  3. 希望有所帮助。

答案 2 :(得分:0)

我想回应一下,我使用了JamesStewy提供的解决方案,并通过小修正工作;

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

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