2016-01-20 2 views
0

Надеюсь, кто-то может мне помочь :)Конфигурация перенаправления Haproxy для plex?

Я пытаюсь настроить 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.mydomain.tld/веб

Но я хотел бы, чтобы иметь возможность присоединиться к сплетению с этим URL => plex.mydomain.tld

Я пытался добавить эту строку :

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

Изменение в порядке, мой URL переключатель к => plex.mydomain.tld/веб/index.html

Но у меня есть 404 ОШИБКА ...

Какой трюк я должен делать to acces plex от plex.mydomain.tld?

Спасибо!

ответ

0

Проблема здесь, к сожалению, не имеет ничего общего с вашей конфигурацией HAProxy. Вместо этого Plex вызывает эту проблему.

Пример

С вашей конфигурации, когда вы идете в plex.mydomain.tld HAProxy добавляет в /web и в результате Plex получает следующий URL: plex.mydomain.tld/web. Это правильно, однако Plex затем хочет переслать браузер на plex.mydomain.tld/web/index.html. Но когда браузер отправляет запрос или этот URL-адрес, HAProxy делает шаги и добавляет дополнительно /web, а результирующий URL-адрес, который установлен в Plex, равен plex.mydomain.tld/web/web/index.html, которого нет и, следовательно, ошибка 404.

При работе с plex.mydomain.tld/index.html может работать, я полагаю, что все ссылки с этой страницы на любую другую страницу не будут работать из-за проблемы с сообщением.

Чтобы решить эту проблему можно

  1. Посмотрите в конфигурации Плекса, чтобы увидеть, если это возможно, чтобы запустить его с вне /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, если вам не установлены.

Смежные вопросы