plex的Haproxy重定向配置?

plex的Haproxy重定向配置?,proxy,load-balancing,reverse-proxy,haproxy,plex,Proxy,Load Balancing,Reverse Proxy,Haproxy,Plex,希望有人能帮我:) 我尝试将HAProxy配置为丛重定向,但尚未找到解决方案。 因此,基本上要运行plex主页,您应该转到=>iPAddress:PORT/web,它将重定向到iPAddress:PORT/web/index.html 我做了这样的重定向: use_backend plex if { hdr_beg(Host) -i plex. } backend plex server plex localhost:32400 check 没关系,我可以加入plex=>plex.m

希望有人能帮我:)

我尝试将HAProxy配置为丛重定向,但尚未找到解决方案。 因此,基本上要运行plex主页,您应该转到=>iPAddress:PORT/web,它将重定向到iPAddress: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,我应该采取什么样的技巧


谢谢

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

示例

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

当转到
plex.mydomain.tld/index.html可能会起作用时,我假设由于上述问题,从该页面到任何其他页面的所有链接都不会起作用

要解决此问题,您可以

  • 查看Plex的配置,看看是否可以在没有
    /web
    的情况下运行它
  • 从中汲取灵感,您可以如下配置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
    
    关键区别在于
    重定向位置
    行,如果未设置标题
    X-Plex-Device-Name
    ,该行将从
    /
    重定向到
    /web/index.html
    。您必须检查标题的原因是,plex似乎使用了
    /
    进行其他操作

    注意:这个配置就是一个例子,我根本没有测试过


  • 希望能有所帮助。

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

    示例

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

    当转到
    plex.mydomain.tld/index.html可能会起作用时,我假设由于上述问题,从该页面到任何其他页面的所有链接都不会起作用

    要解决此问题,您可以

  • 查看Plex的配置,看看是否可以在没有
    /web
    的情况下运行它
  • 从中汲取灵感,您可以如下配置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
    
    关键区别在于
    重定向位置
    行,如果未设置标题
    X-Plex-Device-Name
    ,该行将从
    /
    重定向到
    /web/index.html
    。您必须检查标题的原因是,plex似乎使用了
    /
    进行其他操作

    注意:这个配置就是一个例子,我根本没有测试过


  • 希望这能有所帮助。

    我想回应一下,我使用了JamesStewy提供的解决方案,它很有效,只是做了一些小的修改

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

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

    我想回应一下,我使用了JamesStewy提供的解决方案,它工作了,只是做了一些小的修改

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

    至少,这对我来说是必要的(运行haproxy 1.7.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凭据,可以将其删除。

    找到了一些帮助我解决问题的信息:

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