2016-01-20 80 views
0

希望有人可以幫助我:)plex的Haproxy重定向配置?

我嘗試配置HAProxy進行重定向,但沒有找到解決方案。 所以基本上運行plex的主頁,你應該去=> IPADRESS:PORT /網,其重定向到IPADRESS:PORT /網絡/ index.html的

我做這種重定向:

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

backend plex 
    server plex localhost:32400 check 

這是好的,我可以加入的plex => plex.mydomain.tld /網絡

但是我想能夠加入叢與此URL => plex.mydomain.tld

我想加入這行:

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

轉變是好的,我的網址開關=> plex.mydomain.tld /網絡/ index.html的

但我有一個404錯誤...

什麼樣的招我應該做的從plex.mydomain.tld訪問plex?

謝謝!

回答

0

不幸的是,這裏的問題與您的HAProxy配置無關。相反,它是導致問題的Plex。

您的配置,當你去plex.mydomain.tld HAProxy的在/web增加,因此Plex的得到以下網址: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可能工作,但我認爲從該頁面到任何其他頁面的所有鏈接由於發言權問題而不起作用。

爲了解決這個問題,你可以

  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似乎使用/來表示其他內容。

    注:這個配置是一個例子,我還沒有在所有

希望有所幫助測試這一點。

0

我想回應一下,我使用了JamesStewy提供的解決方案,它的工作原理與小修正相同;

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

至少,這對我來說是必要的(運行haproxy 1.7.2)。

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證書。